|
16337
|
733
|
14
|
2026-05-11T08:43:56.271795+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489036271_m2.jpg...
|
PhpStorm
|
faVsco.js – MatchActivityCrmData.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
maxExceptions
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/1
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Crm;
use Exception;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Connection;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Jobs\Job;
use Jiminny\Jobs\Middleware\HandleHubspotRateLimit;
use Jiminny\Models\Activity;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Repositories\ActivityRepository;
use Jiminny\Services\Crm\CrmActivityService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Throwable;
class MatchActivityCrmData extends Job implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use SerializesModels;
public int $maxExceptions = 3;
private const int RETRY_WINDOW_MINUTES = 30;
private int $activityId;
private ?Configuration $fromConfiguration;
private bool $remoteSearch;
public function middleware(): array
{
return [new HandleHubspotRateLimit()];
}
public function retryUntil(): \DateTimeInterface
{
return now()->addMinutes(self::RETRY_WINDOW_MINUTES);
}
public function __construct(
int $activityId,
?Configuration $fromConfiguration = null,
bool $remoteSearch = false,
) {
$this->activityId = $activityId;
$this->fromConfiguration = $fromConfiguration;
$this->remoteSearch = $remoteSearch;
$this->onQueue(Constants::QUEUE_ANALYTICS_LOW);
}
public function uniqueId(): string
{
$configId = $this->fromConfiguration?->getId() ?? 0;
$remote = $this->remoteSearch ? 'remote' : 'local';
return "$this->activityId:$configId:$remote";
}
public function timeout(): int
{
return 300; // 5 minutes max execution time
}
public function uniqueFor(): int
{
return self::RETRY_WINDOW_MINUTES * 60 + 60;
}
public function backoff(): array
{
return [30, 90, 180];
}
/**
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws Exception|Throwable
*/
public function handle(
ActivityRepository $activityRepository,
CrmActivityService $crmActivityService,
Connection $connection,
): void {
$activity = $activityRepository->findById($this->activityId);
if ($activity === null) {
throw new InvalidArgumentException('[MatchActivityCrmData] Cannot find activity.');
}
try {
$connection->transaction(function () use ($activity, $crmActivityService, $activityRepository) {
Log::info('[MatchActivityCrmData] Starting CRM data matching', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
'set_configuration' => $this->fromConfiguration?->getId(),
'old_state' => [
'lead_id' => $activity->getLead()?->getId(),
'contact_id' => $activity->getContact()?->getId(),
'account_id' => $activity->getAccount()?->getId(),
'opportunity_id' => $activity->getOpportunity()?->getId(),
'stage_id' => $activity->getStage()?->getId(),
],
]);
$this->resetCrmMappings($activity, $activityRepository);
$this->switchCrmConfigurationIfNeeded($activity);
$activity->refresh();
$crmActivityService->updateCrmData(
activity: $activity,
remoteSearch: $this->remoteSearch,
);
$hasMatch = $activity->getLead() !== null
|| $activity->getContact() !== null
|| $activity->getAccount() !== null
|| $activity->getOpportunity() !== null;
if ($hasMatch) {
Log::info('[MatchActivityCrmData] Successfully matched CRM data', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
'lead_id' => $activity->getLead()?->getId(),
'contact_id' => $activity->getContact()?->getId(),
'account_id' => $activity->getAccount()?->getId(),
'opportunity_id' => $activity->getOpportunity()?->getId(),
'stage_id' => $activity->getStage()?->getId(),
]);
} else {
Log::info('[MatchActivityCrmData] No CRM match found', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
]);
}
});
} catch (Throwable $e) {
if (! $e instanceof RateLimitException) {
Log::error('[MatchActivityCrmData] Failed to match CRM data', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
'exception' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
}
throw $e;
}
}
public function failed(Throwable $exception): void
{
Log::error('[MatchActivityCrmData] Job permanently failed after all retries', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
'from_configuration' => $this->fromConfiguration?->getId(),
'exception' => $exception->getMessage(),
'attempts' => $this->attempts(),
]);
}
private function resetCrmMappings(
Activity $activity,
ActivityRepository $activityRepository
): void {
$activity->update([
'lead_id' => null,
'contact_id' => null,
'account_id' => null,
'opportunity_id' => null,
'stage_id' => null,
]);
$participantsOldState = $activityRepository->getActivityParticipants($activity)
->map(function ($participant) {
return [
'id' => $participant->id,
'user_id' => $participant->user_id,
'contact_id' => $participant->contact_id,
'lead_id' => $participant->lead_id,
];
});
if ($participantsOldState->isNotEmpty()) {
Log::info('[MatchActivityCrmData] Participants old state', [
'activity' => $this->activityId,
'participants' => $participantsOldState->toArray(),
]);
}
$activity->participants()->update([
'user_id' => null,
'contact_id' => null,
'lead_id' => null,
]);
}
private function switchCrmConfigurationIfNeeded(Activity $activity): void
{
if ($this->fromConfiguration === null) {
return;
}
if ($activity->getCrm()?->getId() === $this->fromConfiguration->getId()) {
return;
}
Log::info('[MatchActivityCrmData] Switching CRM configuration', [
'activity' => $this->activityId,
'old_configuration' => $activity->getCrm()?->getId(),
'new_configuration' => $this->fromConfiguration->getId(),
]);
$activity->update([
'crm_configuration_id' => $this->fromConfiguration->getId(),
'crm_provider_id' => null,
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.10472074,"top":0.20430966,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.11735372,"top":0.20351157,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"maxExceptions","depth":4,"bounds":{"left":0.12832446,"top":0.20351157,"width":0.043882977,"height":0.015961692},"on_screen":true,"value":"maxExceptions","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.18118352,"top":0.20351157,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.19115691,"top":0.20351157,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.19980054,"top":0.20351157,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.20844415,"top":0.20351157,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/1","depth":4,"bounds":{"left":0.22207446,"top":0.20271349,"width":0.025598405,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.24767287,"top":0.2019154,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.25631648,"top":0.2019154,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.2649601,"top":0.2019154,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.27360374,"top":0.2019154,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.39793882,"top":0.2019154,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Crm;\n\nuse Exception;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Database\\Connection;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Jobs\\Job;\nuse Jiminny\\Jobs\\Middleware\\HandleHubspotRateLimit;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Repositories\\ActivityRepository;\nuse Jiminny\\Services\\Crm\\CrmActivityService;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\nuse Throwable;\n\nclass MatchActivityCrmData extends Job implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use SerializesModels;\n\n public int $maxExceptions = 3;\n\n private const int RETRY_WINDOW_MINUTES = 30;\n\n private int $activityId;\n private ?Configuration $fromConfiguration;\n private bool $remoteSearch;\n\n public function middleware(): array\n {\n return [new HandleHubspotRateLimit()];\n }\n\n public function retryUntil(): \\DateTimeInterface\n {\n return now()->addMinutes(self::RETRY_WINDOW_MINUTES);\n }\n\n public function __construct(\n int $activityId,\n ?Configuration $fromConfiguration = null,\n bool $remoteSearch = false,\n ) {\n $this->activityId = $activityId;\n $this->fromConfiguration = $fromConfiguration;\n $this->remoteSearch = $remoteSearch;\n\n $this->onQueue(Constants::QUEUE_ANALYTICS_LOW);\n }\n\n public function uniqueId(): string\n {\n $configId = $this->fromConfiguration?->getId() ?? 0;\n $remote = $this->remoteSearch ? 'remote' : 'local';\n\n return \"$this->activityId:$configId:$remote\";\n }\n\n public function timeout(): int\n {\n return 300; // 5 minutes max execution time\n }\n\n public function uniqueFor(): int\n {\n return self::RETRY_WINDOW_MINUTES * 60 + 60;\n }\n\n public function backoff(): array\n {\n return [30, 90, 180];\n }\n\n /**\n * @throws ContainerExceptionInterface\n * @throws NotFoundExceptionInterface\n * @throws Exception|Throwable\n */\n public function handle(\n ActivityRepository $activityRepository,\n CrmActivityService $crmActivityService,\n Connection $connection,\n ): void {\n $activity = $activityRepository->findById($this->activityId);\n if ($activity === null) {\n throw new InvalidArgumentException('[MatchActivityCrmData] Cannot find activity.');\n }\n\n try {\n $connection->transaction(function () use ($activity, $crmActivityService, $activityRepository) {\n Log::info('[MatchActivityCrmData] Starting CRM data matching', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n 'set_configuration' => $this->fromConfiguration?->getId(),\n 'old_state' => [\n 'lead_id' => $activity->getLead()?->getId(),\n 'contact_id' => $activity->getContact()?->getId(),\n 'account_id' => $activity->getAccount()?->getId(),\n 'opportunity_id' => $activity->getOpportunity()?->getId(),\n 'stage_id' => $activity->getStage()?->getId(),\n ],\n ]);\n\n $this->resetCrmMappings($activity, $activityRepository);\n\n $this->switchCrmConfigurationIfNeeded($activity);\n\n $activity->refresh();\n\n $crmActivityService->updateCrmData(\n activity: $activity,\n remoteSearch: $this->remoteSearch,\n );\n\n $hasMatch = $activity->getLead() !== null\n || $activity->getContact() !== null\n || $activity->getAccount() !== null\n || $activity->getOpportunity() !== null;\n\n if ($hasMatch) {\n Log::info('[MatchActivityCrmData] Successfully matched CRM data', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n 'lead_id' => $activity->getLead()?->getId(),\n 'contact_id' => $activity->getContact()?->getId(),\n 'account_id' => $activity->getAccount()?->getId(),\n 'opportunity_id' => $activity->getOpportunity()?->getId(),\n 'stage_id' => $activity->getStage()?->getId(),\n ]);\n } else {\n Log::info('[MatchActivityCrmData] No CRM match found', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n ]);\n }\n });\n } catch (Throwable $e) {\n if (! $e instanceof RateLimitException) {\n Log::error('[MatchActivityCrmData] Failed to match CRM data', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n 'exception' => $e->getMessage(),\n 'trace' => $e->getTraceAsString(),\n ]);\n }\n\n throw $e;\n }\n }\n\n public function failed(Throwable $exception): void\n {\n Log::error('[MatchActivityCrmData] Job permanently failed after all retries', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n 'from_configuration' => $this->fromConfiguration?->getId(),\n 'exception' => $exception->getMessage(),\n 'attempts' => $this->attempts(),\n ]);\n }\n\n private function resetCrmMappings(\n Activity $activity,\n ActivityRepository $activityRepository\n ): void {\n $activity->update([\n 'lead_id' => null,\n 'contact_id' => null,\n 'account_id' => null,\n 'opportunity_id' => null,\n 'stage_id' => null,\n ]);\n\n $participantsOldState = $activityRepository->getActivityParticipants($activity)\n ->map(function ($participant) {\n return [\n 'id' => $participant->id,\n 'user_id' => $participant->user_id,\n 'contact_id' => $participant->contact_id,\n 'lead_id' => $participant->lead_id,\n ];\n });\n\n if ($participantsOldState->isNotEmpty()) {\n Log::info('[MatchActivityCrmData] Participants old state', [\n 'activity' => $this->activityId,\n 'participants' => $participantsOldState->toArray(),\n ]);\n }\n\n $activity->participants()->update([\n 'user_id' => null,\n 'contact_id' => null,\n 'lead_id' => null,\n ]);\n }\n\n private function switchCrmConfigurationIfNeeded(Activity $activity): void\n {\n if ($this->fromConfiguration === null) {\n return;\n }\n\n if ($activity->getCrm()?->getId() === $this->fromConfiguration->getId()) {\n return;\n }\n\n Log::info('[MatchActivityCrmData] Switching CRM configuration', [\n 'activity' => $this->activityId,\n 'old_configuration' => $activity->getCrm()?->getId(),\n 'new_configuration' => $this->fromConfiguration->getId(),\n ]);\n\n $activity->update([\n 'crm_configuration_id' => $this->fromConfiguration->getId(),\n 'crm_provider_id' => null,\n ]);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Crm;\n\nuse Exception;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Database\\Connection;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Jobs\\Job;\nuse Jiminny\\Jobs\\Middleware\\HandleHubspotRateLimit;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Repositories\\ActivityRepository;\nuse Jiminny\\Services\\Crm\\CrmActivityService;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\nuse Throwable;\n\nclass MatchActivityCrmData extends Job implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use SerializesModels;\n\n public int $maxExceptions = 3;\n\n private const int RETRY_WINDOW_MINUTES = 30;\n\n private int $activityId;\n private ?Configuration $fromConfiguration;\n private bool $remoteSearch;\n\n public function middleware(): array\n {\n return [new HandleHubspotRateLimit()];\n }\n\n public function retryUntil(): \\DateTimeInterface\n {\n return now()->addMinutes(self::RETRY_WINDOW_MINUTES);\n }\n\n public function __construct(\n int $activityId,\n ?Configuration $fromConfiguration = null,\n bool $remoteSearch = false,\n ) {\n $this->activityId = $activityId;\n $this->fromConfiguration = $fromConfiguration;\n $this->remoteSearch = $remoteSearch;\n\n $this->onQueue(Constants::QUEUE_ANALYTICS_LOW);\n }\n\n public function uniqueId(): string\n {\n $configId = $this->fromConfiguration?->getId() ?? 0;\n $remote = $this->remoteSearch ? 'remote' : 'local';\n\n return \"$this->activityId:$configId:$remote\";\n }\n\n public function timeout(): int\n {\n return 300; // 5 minutes max execution time\n }\n\n public function uniqueFor(): int\n {\n return self::RETRY_WINDOW_MINUTES * 60 + 60;\n }\n\n public function backoff(): array\n {\n return [30, 90, 180];\n }\n\n /**\n * @throws ContainerExceptionInterface\n * @throws NotFoundExceptionInterface\n * @throws Exception|Throwable\n */\n public function handle(\n ActivityRepository $activityRepository,\n CrmActivityService $crmActivityService,\n Connection $connection,\n ): void {\n $activity = $activityRepository->findById($this->activityId);\n if ($activity === null) {\n throw new InvalidArgumentException('[MatchActivityCrmData] Cannot find activity.');\n }\n\n try {\n $connection->transaction(function () use ($activity, $crmActivityService, $activityRepository) {\n Log::info('[MatchActivityCrmData] Starting CRM data matching', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n 'set_configuration' => $this->fromConfiguration?->getId(),\n 'old_state' => [\n 'lead_id' => $activity->getLead()?->getId(),\n 'contact_id' => $activity->getContact()?->getId(),\n 'account_id' => $activity->getAccount()?->getId(),\n 'opportunity_id' => $activity->getOpportunity()?->getId(),\n 'stage_id' => $activity->getStage()?->getId(),\n ],\n ]);\n\n $this->resetCrmMappings($activity, $activityRepository);\n\n $this->switchCrmConfigurationIfNeeded($activity);\n\n $activity->refresh();\n\n $crmActivityService->updateCrmData(\n activity: $activity,\n remoteSearch: $this->remoteSearch,\n );\n\n $hasMatch = $activity->getLead() !== null\n || $activity->getContact() !== null\n || $activity->getAccount() !== null\n || $activity->getOpportunity() !== null;\n\n if ($hasMatch) {\n Log::info('[MatchActivityCrmData] Successfully matched CRM data', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n 'lead_id' => $activity->getLead()?->getId(),\n 'contact_id' => $activity->getContact()?->getId(),\n 'account_id' => $activity->getAccount()?->getId(),\n 'opportunity_id' => $activity->getOpportunity()?->getId(),\n 'stage_id' => $activity->getStage()?->getId(),\n ]);\n } else {\n Log::info('[MatchActivityCrmData] No CRM match found', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n ]);\n }\n });\n } catch (Throwable $e) {\n if (! $e instanceof RateLimitException) {\n Log::error('[MatchActivityCrmData] Failed to match CRM data', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n 'exception' => $e->getMessage(),\n 'trace' => $e->getTraceAsString(),\n ]);\n }\n\n throw $e;\n }\n }\n\n public function failed(Throwable $exception): void\n {\n Log::error('[MatchActivityCrmData] Job permanently failed after all retries', [\n 'activity' => $this->activityId,\n 'remote_search' => $this->remoteSearch,\n 'from_configuration' => $this->fromConfiguration?->getId(),\n 'exception' => $exception->getMessage(),\n 'attempts' => $this->attempts(),\n ]);\n }\n\n private function resetCrmMappings(\n Activity $activity,\n ActivityRepository $activityRepository\n ): void {\n $activity->update([\n 'lead_id' => null,\n 'contact_id' => null,\n 'account_id' => null,\n 'opportunity_id' => null,\n 'stage_id' => null,\n ]);\n\n $participantsOldState = $activityRepository->getActivityParticipants($activity)\n ->map(function ($participant) {\n return [\n 'id' => $participant->id,\n 'user_id' => $participant->user_id,\n 'contact_id' => $participant->contact_id,\n 'lead_id' => $participant->lead_id,\n ];\n });\n\n if ($participantsOldState->isNotEmpty()) {\n Log::info('[MatchActivityCrmData] Participants old state', [\n 'activity' => $this->activityId,\n 'participants' => $participantsOldState->toArray(),\n ]);\n }\n\n $activity->participants()->update([\n 'user_id' => null,\n 'contact_id' => null,\n 'lead_id' => null,\n ]);\n }\n\n private function switchCrmConfigurationIfNeeded(Activity $activity): void\n {\n if ($this->fromConfiguration === null) {\n return;\n }\n\n if ($activity->getCrm()?->getId() === $this->fromConfiguration->getId()) {\n return;\n }\n\n Log::info('[MatchActivityCrmData] Switching CRM configuration', [\n 'activity' => $this->activityId,\n 'old_configuration' => $activity->getCrm()?->getId(),\n 'new_configuration' => $this->fromConfiguration->getId(),\n ]);\n\n $activity->update([\n 'crm_configuration_id' => $this->fromConfiguration->getId(),\n 'crm_provider_id' => null,\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7850190314526747915
|
6666470271896242332
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
maxExceptions
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/1
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Crm;
use Exception;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Connection;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Jobs\Job;
use Jiminny\Jobs\Middleware\HandleHubspotRateLimit;
use Jiminny\Models\Activity;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Repositories\ActivityRepository;
use Jiminny\Services\Crm\CrmActivityService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Throwable;
class MatchActivityCrmData extends Job implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use SerializesModels;
public int $maxExceptions = 3;
private const int RETRY_WINDOW_MINUTES = 30;
private int $activityId;
private ?Configuration $fromConfiguration;
private bool $remoteSearch;
public function middleware(): array
{
return [new HandleHubspotRateLimit()];
}
public function retryUntil(): \DateTimeInterface
{
return now()->addMinutes(self::RETRY_WINDOW_MINUTES);
}
public function __construct(
int $activityId,
?Configuration $fromConfiguration = null,
bool $remoteSearch = false,
) {
$this->activityId = $activityId;
$this->fromConfiguration = $fromConfiguration;
$this->remoteSearch = $remoteSearch;
$this->onQueue(Constants::QUEUE_ANALYTICS_LOW);
}
public function uniqueId(): string
{
$configId = $this->fromConfiguration?->getId() ?? 0;
$remote = $this->remoteSearch ? 'remote' : 'local';
return "$this->activityId:$configId:$remote";
}
public function timeout(): int
{
return 300; // 5 minutes max execution time
}
public function uniqueFor(): int
{
return self::RETRY_WINDOW_MINUTES * 60 + 60;
}
public function backoff(): array
{
return [30, 90, 180];
}
/**
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws Exception|Throwable
*/
public function handle(
ActivityRepository $activityRepository,
CrmActivityService $crmActivityService,
Connection $connection,
): void {
$activity = $activityRepository->findById($this->activityId);
if ($activity === null) {
throw new InvalidArgumentException('[MatchActivityCrmData] Cannot find activity.');
}
try {
$connection->transaction(function () use ($activity, $crmActivityService, $activityRepository) {
Log::info('[MatchActivityCrmData] Starting CRM data matching', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
'set_configuration' => $this->fromConfiguration?->getId(),
'old_state' => [
'lead_id' => $activity->getLead()?->getId(),
'contact_id' => $activity->getContact()?->getId(),
'account_id' => $activity->getAccount()?->getId(),
'opportunity_id' => $activity->getOpportunity()?->getId(),
'stage_id' => $activity->getStage()?->getId(),
],
]);
$this->resetCrmMappings($activity, $activityRepository);
$this->switchCrmConfigurationIfNeeded($activity);
$activity->refresh();
$crmActivityService->updateCrmData(
activity: $activity,
remoteSearch: $this->remoteSearch,
);
$hasMatch = $activity->getLead() !== null
|| $activity->getContact() !== null
|| $activity->getAccount() !== null
|| $activity->getOpportunity() !== null;
if ($hasMatch) {
Log::info('[MatchActivityCrmData] Successfully matched CRM data', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
'lead_id' => $activity->getLead()?->getId(),
'contact_id' => $activity->getContact()?->getId(),
'account_id' => $activity->getAccount()?->getId(),
'opportunity_id' => $activity->getOpportunity()?->getId(),
'stage_id' => $activity->getStage()?->getId(),
]);
} else {
Log::info('[MatchActivityCrmData] No CRM match found', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
]);
}
});
} catch (Throwable $e) {
if (! $e instanceof RateLimitException) {
Log::error('[MatchActivityCrmData] Failed to match CRM data', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
'exception' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
}
throw $e;
}
}
public function failed(Throwable $exception): void
{
Log::error('[MatchActivityCrmData] Job permanently failed after all retries', [
'activity' => $this->activityId,
'remote_search' => $this->remoteSearch,
'from_configuration' => $this->fromConfiguration?->getId(),
'exception' => $exception->getMessage(),
'attempts' => $this->attempts(),
]);
}
private function resetCrmMappings(
Activity $activity,
ActivityRepository $activityRepository
): void {
$activity->update([
'lead_id' => null,
'contact_id' => null,
'account_id' => null,
'opportunity_id' => null,
'stage_id' => null,
]);
$participantsOldState = $activityRepository->getActivityParticipants($activity)
->map(function ($participant) {
return [
'id' => $participant->id,
'user_id' => $participant->user_id,
'contact_id' => $participant->contact_id,
'lead_id' => $participant->lead_id,
];
});
if ($participantsOldState->isNotEmpty()) {
Log::info('[MatchActivityCrmData] Participants old state', [
'activity' => $this->activityId,
'participants' => $participantsOldState->toArray(),
]);
}
$activity->participants()->update([
'user_id' => null,
'contact_id' => null,
'lead_id' => null,
]);
}
private function switchCrmConfigurationIfNeeded(Activity $activity): void
{
if ($this->fromConfiguration === null) {
return;
}
if ($activity->getCrm()?->getId() === $this->fromConfiguration->getId()) {
return;
}
Log::info('[MatchActivityCrmData] Switching CRM configuration', [
'activity' => $this->activityId,
'old_configuration' => $activity->getCrm()?->getId(),
'new_configuration' => $this->fromConfiguration->getId(),
]);
$activity->update([
'crm_configuration_id' => $this->fromConfiguration->getId(),
'crm_provider_id' => null,
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16339
|
733
|
15
|
2026-05-11T08:44:03.002007+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489043002_m2.jpg...
|
PhpStorm
|
faVsco.js – RateLimitException.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8043719072324535154
|
-8628527368849355612
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
PhostormcodeFV faVsco.jsr Project: faVsco.js, menu
PhostormcodeFV faVsco.jsroledeyg createnotes.ongyhuospotsyncstrategybase.ongС MаLсhACuViLies lONeWс маchаcиvilycrmbatae Noteoblect.onp* RateLimitexceptionsaveAcuivity.ongcsavelranscriouion.onc© SetupLayout.php(C)PaqinationContia.phgc) SyncActivitv.php© SyncFieldMetadata.phmaxExcentionsX P Cc W .*гI Y:c) SvncHubspotObiects.rclass MatchActivityCrmData extends Job implements ShouldQueue, ShouldBeUnique© SyncLeads.phpc) SvncObiects.ohp© SvncOpportunities.lobc) suncoooortunitv.ono© SyncProfileMetadata.p 141C) SvncTeam=ields.Job.oll@ SvncTeamMetadata.pt© UpdateOpportunitySpC UodateStage.pngM noalPicksMailboxN MeetinaRotlM Middleware(C) HandleHubsnotPatel in(c) RateLimited.onoD StreamingD Teamleleonony• C Userc) ChangeEmallJob.phpDeactivateUserJob.ph 15:© DeletescheduledUser/ 15%© SetupDefaultsavedSei 153SyncTolntercom.phpc) sunc o? anhat.onoC) SuncToUserPilot.ohoC BaseProcessina.Job.ohd© ImportRecallAlRecordings 159© ImportRemoteTrackJob.p 160lC.lob.nhn© .JobDispatcher.php© JobDispatcherInterface.p 172@ PuraeSoftDeletedOnnorti#. SasVicibilitvControl.nhnlv D Listenersv M ActivitiocvM ActivityDrovidor3m luctealiv MllcorDilot@ TrackProviderin: 179pubLic tunccion handlelSconnection-›transaction(function () use (Sactivity, $cervice, sactivitykepository) t.scage_1d → pacuvity-gerocage:-sgertoon}else {Log:: info( message: '[MatchActivityCrmDatal No CRM match found', [activity' = Sch1s->act1v1ty10remote search = schis-›remotesearch.} catch (Throwable $e) {Log::error('[MatchActivityCrmData] Failed to match CRM data', [actiVity'= schis-aculvicyzo,= sthis->remotesearch.• Extractif (! Se instanceof RateLimitException) ‹'[MatchActivityCrmDatal Failed to match CRM data'. ['trace' => se->qettirace sStrinao.throw Se.public function failed(Throwable $exception): void{...}Tusagennivato function nocotfnmManninac(Activity Sactivity.ActivityRepository $activityRepository): void {Sactivity->update([lood idt" contact 1d B93 lote,Accept File &+X Reiect File 086 €+ 3 of 3 files →lelner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)suppont Dally • In sh 1om100% 2• Mon 11 May 11:44:02AskJiminnyReportActivityServiceTest v+0 ..114A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKOb.# console [euJ# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"Concent-lvoe". "apolicacionison charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudeSubDomains: preload")"access-control-allow-credentials": "false"i."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To":["{("endpoints\":[{("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,"reportco. "cr-nel"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545CascadeHubspot Rate Limit Reb phpcatch (Throwable se) ‹if (! $e instanceof RateLimitException) {Log::error('(MatchActivityCrmData) Failed to match CRM data', [...]):throw se:Same outcome, more readable, no dead-looking throw se branch.mollementing all three chandes•RateLimitException.php• Client.php+7-12Now the middleware — dron DAILY LIMIT branch. droo MIN RETRY DELAY to 1. keen litter."HandleHubspotRateLimit.oho+3 -13Now MatchActiv1tycrmbata - collapse the two catches into one with instanceot-•MatchActivityCrmData.php+8-81All changes applied. Final state:Summary of this round of changesFileChangeReasonRateLimitExcent.ion.ohrRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallvCLient. oho:: executeRequesCache stores scalar fint (retry after) instead of arravSimoler. no policy to trackCLient. oho:- executeRequesDroo policy from RateLimitExcent ion constructonMatch new excention sianature: still loa policy for observabilitvHandleHubspotRateLimit.phpretrvUntil + lona cache TTL handle it. saves comolexitvHandleHubspotRateLimit.phpHonor HubSoot's actual sianal: litter does the herd orotectionHandleHubspotRateLimit.ohdNamed JITTER SECONDS constantSelf-documentingCollapsed dual catch into sinale catch + instanceofMore readable: no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policvName: DAILY LIMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table returns 600s (the DAILY_LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min. retrvüntil expires → iobs permanent-fail naturallv7 No cnecial branch no cioh-sfaslll no eycontion fioldReiect alllAccent alliAsk anvthing (84D)Claude Onus 4.7 MediumWN Windsurf Teams47-51UTE.Rio 4 spaces...
|
16337
|
NULL
|
NULL
|
NULL
|
|
16340
|
733
|
16
|
2026-05-11T08:44:05.347018+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489045347_m2.jpg...
|
PhpStorm
|
faVsco.js – RateLimitException.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Exceptions;
use Throwable;
class RateLimitException extends RuntimeException
{
public function __construct(
string $message = '',
private readonly int $retryAfter = 1,
?Throwable $previous = null,
) {
parent::__construct($message, 0, $previous);
}
public function getRetryAfter(): int
{
return max($this->retryAfter, 1);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Exceptions;\n\nuse Throwable;\n\nclass RateLimitException extends RuntimeException\n{\n public function __construct(\n string $message = '',\n private readonly int $retryAfter = 1,\n ?Throwable $previous = null,\n ) {\n parent::__construct($message, 0, $previous);\n }\n\n public function getRetryAfter(): int\n {\n return max($this->retryAfter, 1);\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.1963288,"width":0.2912234,"height":0.782921},"on_screen":true,"lines":[{"char_start":0,"char_count":6,"bounds":{"left":0.11968085,"top":0.0,"width":0.012965426,"height":0.014365523}},{"char_start":7,"char_count":25,"bounds":{"left":0.11968085,"top":0.0,"width":0.06216755,"height":0.014365523}},{"char_start":33,"char_count":30,"bounds":{"left":0.11968085,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":64,"char_count":15,"bounds":{"left":0.11968085,"top":0.019952115,"width":0.036236703,"height":0.014365523}},{"char_start":80,"char_count":50,"bounds":{"left":0.11968085,"top":0.055067837,"width":0.12699468,"height":0.014365523}},{"char_start":130,"char_count":2,"bounds":{"left":0.11968085,"top":0.0726257,"width":0.0026595744,"height":0.014365523}},{"char_start":132,"char_count":33,"bounds":{"left":0.11968085,"top":0.090183556,"width":0.08277926,"height":0.014365523}},{"char_start":165,"char_count":30,"bounds":{"left":0.11968085,"top":0.10774142,"width":0.07513298,"height":0.014365523}},{"char_start":195,"char_count":46,"bounds":{"left":0.11968085,"top":0.12529927,"width":0.11635638,"height":0.014365523}},{"char_start":241,"char_count":37,"bounds":{"left":0.11968085,"top":0.14285715,"width":0.0930851,"height":0.014365523}},{"char_start":278,"char_count":8,"bounds":{"left":0.11968085,"top":0.16041501,"width":0.017952127,"height":0.014365523}},{"char_start":286,"char_count":53,"bounds":{"left":0.11968085,"top":0.17797287,"width":0.14993352,"height":0.014365523}},{"char_start":339,"char_count":6,"bounds":{"left":0.11968085,"top":0.19553073,"width":0.012965426,"height":0.014365523}},{"char_start":346,"char_count":41,"bounds":{"left":0.11968085,"top":0.2482043,"width":0.10372341,"height":0.014365523}},{"char_start":387,"char_count":6,"bounds":{"left":0.11968085,"top":0.26576218,"width":0.012965426,"height":0.014365523}},{"char_start":393,"char_count":42,"bounds":{"left":0.11968085,"top":0.28332004,"width":0.12732713,"height":0.014365523}},{"char_start":435,"char_count":6,"bounds":{"left":0.11968085,"top":0.3008779,"width":0.012965426,"height":0.014365523}},{"char_start":441,"char_count":1,"bounds":{"left":0.11968085,"top":0.31843576,"width":0.0026595744,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Exceptions;\n\nuse Throwable;\n\nclass RateLimitException extends RuntimeException\n{\n public function __construct(\n string $message = '',\n private readonly int $retryAfter = 1,\n ?Throwable $previous = null,\n ) {\n parent::__construct($message, 0, $previous);\n }\n\n public function getRetryAfter(): int\n {\n return max($this->retryAfter, 1);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915168145101248080
|
-2364084979461158070
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Exceptions;
use Throwable;
class RateLimitException extends RuntimeException
{
public function __construct(
string $message = '',
private readonly int $retryAfter = 1,
?Throwable $previous = null,
) {
parent::__construct($message, 0, $previous);
}
public function getRetryAfter(): int
{
return max($this->retryAfter, 1);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16343
|
733
|
17
|
2026-05-11T08:44:09.815461+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489049815_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5149590296267362150
|
-8708823570875044926
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-limiProiect( OutofRoundsEycention n.yhuospotsyncstrategybase.ongQuotaExceededExceptiorKateLimitexception.onp© RegistrationinvitationMisr© RequestQueuedForDeferrResponseException.phpRinqCentralException.phr © PaginationConfig.phpRingcentralExtensionNotlrohoRuntimeException.php( SequenceNumberExceptideclare(strict tvoes=1)):@ ServicelntegrationExcept( ServiceUnavailable Excepnamespace Jiminny Excentions:( SidekickSettinosexceotio(4 Socia Account NotFoundeluse Throwahile:(4) SocialAccountTokeninvali(SvncActivitvExcention.ohclass Ratel imi+Fxcention extends RuntimeSxcentionf TenantisolationEyception.( TextRelavsxcention.ohv@ TooManvFailedActivities 1 12public function __construct(string smessage -4 TranscrintionNotindeyedi 12private readonly int SretryAfter = 1,@ UneynectedCallSycention 17cInrowable sprevious = null.© UnexpectedEloquentMod 15© UnexpectedValueExcepti 16parent:: constructsmessage.code: 0, Sprevious© ZipAttackException.phpD FFMpegD) Formats> D Guardspublic function getRetryAfterO: intCacando 99 1=1• m Helpersv D Httpreturn maxsthis->retrvatter..values: "• _ AccessI okenProviderv C Controllersv DAPI> 0 AiCallScoringAlReports• DeallnsiantsOoportunit• → PaqeScorecards• SettinasTeaminsiahts• M Themecv MUserAutomatedRer(C) UserAutomatedivMv2C) ActivitvV2Contr8) AckAnvthinaGor(C) Ack liminnvRend( NonleV2Controll(e OnNemandv2e,0 DievlictControlle"a) DiaulictCharoCoolner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)© SyncRelatedActivityManager.phpCachedcrmservicebecorator.ong© ProspectCache.phpC) HandlerubspotkateLimit.php xommand 9esuppont Dally • In sh 1om100% 2• Mon 11 May 11:44:09AskJiminnyReportActivityServiceTest v+0 ..= custom.loa XA SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKOb.# console [euJ# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","CF-Cache-Status": L"DYNAMIC"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSubDomains: preload")acceot-encodino""access-control-allow-credentials": "false"i."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"Set-Cookie":["__cf_bm=StUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To":["{"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL":["{"success_fraction\":0.01,27"reportco. "cr-nel"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545CascadeHubspot Rate Limit Reb phpcatch (Throwable se) ‹if (! $e instanceof RateLimitException) {Log::error('(MatchActivityCrmData] Failed to match CRM data', [...]):throw se:Same outcome, more readable, no dead-looking throw se branch.molementing all three chandes•RateLimitException.php• Client.php+7-12Now the middleware — droo DAILY LIMIT branch. drop MIN RETRY DELAY to 1. keen litter."HandleHubspotRateLimit.oho+3 -13Now MatchActiv1tycrmbata - collapse the two catches into one with instanceot:•MatchActivityCrmData.php+8-8|All changes applied. Final state:Summary of this round of changesFileChangeReasonRateLimitExcent.ion.ohrRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallvCLient. oho:: executeRequesCache stores scalar fint (retry after) instead of arravSimoler. no policy to trackCLient. oho:- executeRequesDroo policy from RateLimitExcent ion constructonMatch new excention sianature: still loa policy for observabilitvHandleHubspotRateLimit.phpretrvUntil + lona cache TTL handle it. saves comolexitvHandleHubspotRateLimit.phpHonor HubSoot's actual sianal: litter does the herd orotectionHandleHubspotRateLimit.ohdNamed JITTER SECONDS constantSelf-documentingCollapsed dual catch into sinale catch + instanceofMore readable: no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policvName: DAILY LIMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min. retrvüntil expires → iobs permanent-fail naturallv7 No cnecial branch no cioh-sfasll) no eycontion field3 files +73 -43Reiect allAccent alliAsk anvthing (84.L)Claude Onus 4.7 MediumW Windsurf Teams19-24 (12 charc)UTE.Rio 4 spaces...
|
16340
|
NULL
|
NULL
|
NULL
|
|
16344
|
733
|
18
|
2026-05-11T08:44:11.746900+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489051746_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.1963288,"width":0.29886967,"height":0.8036712},"on_screen":true,"lines":[{"char_start":0,"char_count":6,"bounds":{"left":0.11968085,"top":0.0,"width":0.012965426,"height":0.014365523}},{"char_start":7,"char_count":25,"bounds":{"left":0.11968085,"top":0.0,"width":0.06216755,"height":0.014365523}},{"char_start":33,"char_count":35,"bounds":{"left":0.11968085,"top":0.0,"width":0.08809841,"height":0.014365523}},{"char_start":69,"char_count":36,"bounds":{"left":0.11968085,"top":0.019952115,"width":0.010305851,"height":0.014365523}},{"char_start":105,"char_count":43,"bounds":{"left":0.1299867,"top":0.019952115,"width":0.0076462766,"height":0.014365523}},{"char_start":149,"char_count":4,"bounds":{"left":0.11968085,"top":0.055067837,"width":0.0076462766,"height":0.014365523}},{"char_start":153,"char_count":73,"bounds":{"left":0.11968085,"top":0.0726257,"width":0.18650267,"height":0.014365523}},{"char_start":226,"char_count":70,"bounds":{"left":0.11968085,"top":0.090183556,"width":0.17885639,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16346
|
NULL
|
0
|
2026-05-11T08:44:44.688195+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489084688_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.113696806,"top":0.0,"width":0.29886967,"height":1.0},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16344
|
NULL
|
NULL
|
NULL
|
|
16348
|
735
|
0
|
2026-05-11T08:45:24.553038+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489124553_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.11668883,"top":0.0,"width":0.29886967,"height":1.0},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16344
|
NULL
|
NULL
|
NULL
|
|
16350
|
735
|
1
|
2026-05-11T08:45:25.673302+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489125673_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIeWINavicareCodeFV faVsco.js°9 JY-20725-h PhostormVIeWINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-Iiyroledey© SyncRelatedActivityManager.php© TeardownStream.php© HubspotSyncStrategyBase.php• AiAutomationAjReportsAudio© Job.phpAutomatedReports© RequestGenerateAskJi© RequestGenerateRepo(C)PaqinationContia.phg© SendReportExpiringSolacs HandleHuhenotPatel imit© SendReportJob.php© SendReportMailJob.ph 15© SendReportNotGenera> [ Calendarprivate const int MAX_ RETRY_DELAY = 600;0 Crmv _ Delere© DeleteAccount.Job.private const int MIN_RETRY_DELAY = 1private const int MAX_RATE_LIMIT_ATTEMPTS = 20;© ProspectCache.php* RateLimitexotkateLimitphp xC) DeleteContact.Job.rTDeleteCrmEntitviraC) DeleteleadJob.ohr© DeleteOpportunityC) VeritvActivitvermirm Hubsoot• M Salesforce© AutologDelayedToCrm ,4(C) CheckAndRetrvRemot(C) CreateFollowuoActivit(c) CroateNotec nhnl(c) MatchActivitiocToNew(C) MatchA ctivitvCrmDatal(e [EMAIL]© saveAcuivity.onp© SaveTranscription.php© SetupLayout.php© SyncActivity.php© SyncFieldMetadata.ph© SyncHubspotObiects.r© SyncLeads.php© SyncObjects.php© SyncOpportunities.Job© SyncOpportunitv.php© SyncProfileMetadata.nc) Svncireampields.00.o© SvncTeamMetadata.of(C) Uodate@ooortunitvSoN DealRisksM Meetina3o1M Middleward(C) Patel imited nhn> M StreaminalAccept Renect1 usaaeprivate const int JITTER SECONDS = 5:public function handle(object $job, callable Snext): voidtry 1Snext(Siob):} catch (RateLimitException $e) {1t sn00->arremotso ›= selt::MAX RAILLINLLATTERPISD"Loa::error('[HandleHubspotRateLimitl Rate limit attemot Limit reached. giving up'. [llattemnts' => Siob->attemots@'rate_limit_message' => $e->getMessageO.throw se:Sdelay = max( value: self::MIN_RETRY_DELAY, min($e->getRetryAfterO$delay += random_int(0, self::JITTER_SECONDS)...values: self::MAX_RETRY_DELAY)):SretrvAften = Se->aetRetrvAfterOlSdelav = maxself:•MIN RETRY DELAY. minSretrvAften, self.•MAX RETRY DELAY DRAccept ReiectLog: :info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay'. [iretry aen aguete efestryaten,Sattemots = Siob->attemots@:if ($attempts <= 3 || $attempts % 10 === 0) {Loa: : info( message)'HandlelubsootRateLimit Rate Limit cauaht, releasing iob with delav'.iiattemots' => Sattemotsinetny aften!=> So->ae+RetnvAftenOi.delayl > Sdelay,Accept File &+X Reiect File 88@+ 2 of 3 files →suppont Dally • In sh 1om100% 2• Mon 11 May 11:45:25AskJiminnyReportActivityServiceTest v+0 ..=custom.log~A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKOb.# console leu)# console [slAGiNG)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray": ["9f80deb8db60dc3a-SOF"]."CF-Cache-Status": L"DYNAMIC"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudeSubDomains: preload")acceot-encodino"."access-control-allow-credentials": "false"i."server-timing": ["hcid;desc=|"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"sl"endpoints ".f≤("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545CascadeHubspot Rate Limit Reb phpcatch (Throwable se) ‹if (! $e instanceof RateLimitException) {Log::error('(MatchActivityCrmData] Failed to match CRM data', [...]):throw se:Same outcome, more readable, no dead-looking throw se branch.molementing all three chandes•RateLimitException.php• Client.php+7-12Now the middleware — droo DAILY LIMIT branch. drop MIN RETRY DELAY to 1. keen litter."HandleHubspotRateLimit.oho+3 -13Now MatchActiv1tycrmbata — collapse the two catches into one with instanceot:•MatchActivityCrmData.php+8-81All changes applied. Final state:Summary of this round of changesFileChangeReasonRateLimitExcent.ion.ohrRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallvCLient. oho:: executeRequesCache stores scalar fint (retry after) instead of arravSimoler. no policy to trackCLient. oho:- executeRequesDroo policy from RateLimitExcent ion constructonMatch new excention sianature: still loa policy for observabilitvHandleHubspotRateLimit.phpretrvUntil + lona cache TTL handle it. saves comolexitvHandleHubspotRateLimit.phpHonor HubSoot's actual sianal: litter does the herd orotectionHandleHubspotRateLimit.ohdNamed JITTER SECONDS constantSelf-documentingCollapsed dual catch into sinale catch + instanceofMore readable: no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policvName: DAILY LIMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table returns 600s (the DAILY_LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min. retrvüntil expires → iobs permanent-fail naturallv7 No cnecial branch no cioh-sfaslll no eycontion fioldReiect allAccent alliAsk anvthing (84D)Claude Onus 4.7 MediumW Windsurf Teamc25-86UTE.Rio 4 spaces...
|
NULL
|
-6014847717140626158
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIeWINavicareCodeFV faVsco.js°9 JY-20725-h PhostormVIeWINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-Iiyroledey© SyncRelatedActivityManager.php© TeardownStream.php© HubspotSyncStrategyBase.php• AiAutomationAjReportsAudio© Job.phpAutomatedReports© RequestGenerateAskJi© RequestGenerateRepo(C)PaqinationContia.phg© SendReportExpiringSolacs HandleHuhenotPatel imit© SendReportJob.php© SendReportMailJob.ph 15© SendReportNotGenera> [ Calendarprivate const int MAX_ RETRY_DELAY = 600;0 Crmv _ Delere© DeleteAccount.Job.private const int MIN_RETRY_DELAY = 1private const int MAX_RATE_LIMIT_ATTEMPTS = 20;© ProspectCache.php* RateLimitexotkateLimitphp xC) DeleteContact.Job.rTDeleteCrmEntitviraC) DeleteleadJob.ohr© DeleteOpportunityC) VeritvActivitvermirm Hubsoot• M Salesforce© AutologDelayedToCrm ,4(C) CheckAndRetrvRemot(C) CreateFollowuoActivit(c) CroateNotec nhnl(c) MatchActivitiocToNew(C) MatchA ctivitvCrmDatal(e [EMAIL]© saveAcuivity.onp© SaveTranscription.php© SetupLayout.php© SyncActivity.php© SyncFieldMetadata.ph© SyncHubspotObiects.r© SyncLeads.php© SyncObjects.php© SyncOpportunities.Job© SyncOpportunitv.php© SyncProfileMetadata.nc) Svncireampields.00.o© SvncTeamMetadata.of(C) Uodate@ooortunitvSoN DealRisksM Meetina3o1M Middleward(C) Patel imited nhn> M StreaminalAccept Renect1 usaaeprivate const int JITTER SECONDS = 5:public function handle(object $job, callable Snext): voidtry 1Snext(Siob):} catch (RateLimitException $e) {1t sn00->arremotso ›= selt::MAX RAILLINLLATTERPISD"Loa::error('[HandleHubspotRateLimitl Rate limit attemot Limit reached. giving up'. [llattemnts' => Siob->attemots@'rate_limit_message' => $e->getMessageO.throw se:Sdelay = max( value: self::MIN_RETRY_DELAY, min($e->getRetryAfterO$delay += random_int(0, self::JITTER_SECONDS)...values: self::MAX_RETRY_DELAY)):SretrvAften = Se->aetRetrvAfterOlSdelav = maxself:•MIN RETRY DELAY. minSretrvAften, self.•MAX RETRY DELAY DRAccept ReiectLog: :info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay'. [iretry aen aguete efestryaten,Sattemots = Siob->attemots@:if ($attempts <= 3 || $attempts % 10 === 0) {Loa: : info( message)'HandlelubsootRateLimit Rate Limit cauaht, releasing iob with delav'.iiattemots' => Sattemotsinetny aften!=> So->ae+RetnvAftenOi.delayl > Sdelay,Accept File &+X Reiect File 88@+ 2 of 3 files →suppont Dally • In sh 1om100% 2• Mon 11 May 11:45:25AskJiminnyReportActivityServiceTest v+0 ..=custom.log~A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKOb.# console leu)# console [slAGiNG)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray": ["9f80deb8db60dc3a-SOF"]."CF-Cache-Status": L"DYNAMIC"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudeSubDomains: preload")acceot-encodino"."access-control-allow-credentials": "false"i."server-timing": ["hcid;desc=|"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"sl"endpoints ".f≤("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545CascadeHubspot Rate Limit Reb phpcatch (Throwable se) ‹if (! $e instanceof RateLimitException) {Log::error('(MatchActivityCrmData] Failed to match CRM data', [...]):throw se:Same outcome, more readable, no dead-looking throw se branch.molementing all three chandes•RateLimitException.php• Client.php+7-12Now the middleware — droo DAILY LIMIT branch. drop MIN RETRY DELAY to 1. keen litter."HandleHubspotRateLimit.oho+3 -13Now MatchActiv1tycrmbata — collapse the two catches into one with instanceot:•MatchActivityCrmData.php+8-81All changes applied. Final state:Summary of this round of changesFileChangeReasonRateLimitExcent.ion.ohrRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallvCLient. oho:: executeRequesCache stores scalar fint (retry after) instead of arravSimoler. no policy to trackCLient. oho:- executeRequesDroo policy from RateLimitExcent ion constructonMatch new excention sianature: still loa policy for observabilitvHandleHubspotRateLimit.phpretrvUntil + lona cache TTL handle it. saves comolexitvHandleHubspotRateLimit.phpHonor HubSoot's actual sianal: litter does the herd orotectionHandleHubspotRateLimit.ohdNamed JITTER SECONDS constantSelf-documentingCollapsed dual catch into sinale catch + instanceofMore readable: no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policvName: DAILY LIMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table returns 600s (the DAILY_LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min. retrvüntil expires → iobs permanent-fail naturallv7 No cnecial branch no cioh-sfaslll no eycontion fioldReiect allAccent alliAsk anvthing (84D)Claude Onus 4.7 MediumW Windsurf Teamc25-86UTE.Rio 4 spaces...
|
16344
|
NULL
|
NULL
|
NULL
|
|
16351
|
735
|
2
|
2026-05-11T08:45:39.863800+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489139863_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16353
|
735
|
3
|
2026-05-11T08:45:41.334773+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489141334_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3982105239543516226
|
-9033075253647691314
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error...
|
16351
|
NULL
|
NULL
|
NULL
|
|
16354
|
735
|
4
|
2026-05-11T08:45:45.907463+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489145907_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16356
|
735
|
5
|
2026-05-11T08:45:51.957550+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489151957_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Cache;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"65","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Cache::put($cacheKey, $retryAfter, $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Cache::put($cacheKey, $retryAfter, $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7220615986847313571
|
6378616412348221796
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Cache;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16354
|
NULL
|
NULL
|
NULL
|
|
16358
|
735
|
6
|
2026-05-11T08:46:03.786756+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489163786_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormINavicareCodeFV faVsco.js°9 JY-20725-handl PhostormINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-linroledey© TrackRecordingFileSiz© TrackRecordingSizeEnT. ValidateSmitProspect:AjReports0 Calendarn Conference0 Crm> @ Bullhorn> OJ CloseC Copper>J CrmobiectsC7 DecorateActivitv• DummyHelpersv h HubspotAccountSvncStrate>D Actionsn ContactsuncStratem Fields• Malournal1 Metadatalv OpportunitySyncSt>MConcerns.(c) Hubsnotl actMonC HubspotLastMor(C) Hubsnotl actMo© HubspotLastMor(C) Hubsnotl actMo© HubspotSingleS© HubspotSyncStr© HubspotWebhoc~ M Padination© HubspotPaginat© PaginationConfi(C) PaqinationState> D ProspectSearchStr:› D Redisv D ServiceTraitsTOnoortunitvsvnd() SvncCrmEntitiesT SuncFieldstirait.T. WriteCrmTrait.ol• M UtilsM WebhookC) BatchSvncCollectot(c) RatchSvncRedisSec) Client nho(C) ClocedDea|Stadecc@ DoalFieldsService ryhuospotsyncstrategybase.ong© ProspectCache.phpC) MatchActivitvCrmData.phg* RateLimitexceptio© PaginationConfia.phd225227 C247252253 Cclass Cuient extends BasecLient imolements Hubspotc ientinterfacecaaaaie noospoecxceperon*AthrowsSocialAccountTokenTnvalidExcention* Athrows BadReauestpublic function getPaginatedDataGenerator(array spayloadint Soffset = 0.int &Stotal = 0.?string &$lastRecordId = null): \Generator {return Sthis->paginationService->qetPaqinatedDataGenerator(sthisSoayloadIII 11ISoffset.&: Stotal.: SlastRecordid• Execute a search request against HubSpot CRM objects with rate limiting.— 30=31* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.* @retuen array The search response with 'results','total', 'paging' keys* Athnowe Patel imitFycention When nato limit c hit* Athnowe HubsnotFycention An APT ennoncpublic function search(string SobjectType, array $payload): arraySendpoint = self::BASE_URL . "/crm/v3/obiects/{$objectType}/search":return Sthis->executeRequest(function • use (Sendpoint, $payload) {Sresponse = Sthis->getInstance@->getClient(->request( method:'POST', $endpoint, ['json' => $payL1 1of 8 edits JAccept File &+X Reiect File t86< 1 of 3 files →* Gchrows DealAnExcentionolner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)=custom.log ^A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console [euJ# console [slAGiNg).2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"Concent-lvoe". "apolicacionison charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudeSubDomains: preload")acceot-encodino""access-control-allow-credentials": "false"i."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"7"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To":["{"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545suppont Dally • In sh 14m100% 2• Mon 11 May 11:46:03AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re• RateLimitException.php+0 ..D Cii+7-12Now the middleware - drop DAILY_LIMIT branch, drop MIN RETRY DELAY to 1, keep jitter:• HandleHubspotRateLimit.php+3-15Now MatchActivitvermdata — collapse the two catches into one with instanceof• MatchActivityCrmData.php+8-8All chandes annlied. Cinal state.Summary of this round of changesFlleChangeReasorRateL1m1tException.phpRemoved policy tield & methodsMiddleware doesn't need it; cache TTL handles DAILY naturallyClient.php::executeRequestcache stores scalar int (retry after instead of arraySimpler; no policy to trackClient. php::executeRequestDrop policy from RateLimitException constructorMatch new exception signature; still log policy for observabilityHandleHubspotRateLimit.phpRemoved DAILY_LIMIT branchretryUntil + long cache TTL handle it; saves complexityHandleHubspotRateLimit.phpMIN_RETRY_DELAY 5 →1Honor HinhGnotle setunl cianal. littor dooc tho hord nrotostionHandleHubspotRateLimit.phpNamed JITTER_ SECONDS constantSelf-documentingMatchActivitvGrmData.nhnCollansed dual catch into sinale catch + instancenfMore readable. no awkward emntv rethrow blockHow DAILY_LIMIT now flows (no special case needed)1. HubSpot returns 429 with nolicvlane: DATLY LTMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iobs with delav 1-6s (cheap cvcles, all hit cache)6. After 20 min retrvlintil eynires @) iohs nermanent-fail naturallv7. No special branch. no siob->fail(). no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version• Job retry cycle is faster (delay 1-6s instead of 5-10s) → ~2x more queue cycles per second per worker• More cache hits per second (since cvcles are faster) = but cache GETs are cheao (~0.1ms)• Same throughput ceiling (5 successful calls/s — HubSpot's limit)• Same final outcome (~9k succeed, ~91k fail at T=30min)|MetricPrevious (this round)This roundSucceccful inhs in 20mina.o00O 000Wasted HubSoot APl calls~10.800~10.800Job non evcles/sed~50-100~100-2503 files +73 -43)Accent alliAsk anvthing (84.L)Claude Onus 4.7 MediumW Windsurf Toams 22-1UTF.8io 4 spaces...
|
NULL
|
-381197201778889158
|
NULL
|
click
|
ocr
|
NULL
|
PhostormINavicareCodeFV faVsco.js°9 JY-20725-handl PhostormINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-linroledey© TrackRecordingFileSiz© TrackRecordingSizeEnT. ValidateSmitProspect:AjReports0 Calendarn Conference0 Crm> @ Bullhorn> OJ CloseC Copper>J CrmobiectsC7 DecorateActivitv• DummyHelpersv h HubspotAccountSvncStrate>D Actionsn ContactsuncStratem Fields• Malournal1 Metadatalv OpportunitySyncSt>MConcerns.(c) Hubsnotl actMonC HubspotLastMor(C) Hubsnotl actMo© HubspotLastMor(C) Hubsnotl actMo© HubspotSingleS© HubspotSyncStr© HubspotWebhoc~ M Padination© HubspotPaginat© PaginationConfi(C) PaqinationState> D ProspectSearchStr:› D Redisv D ServiceTraitsTOnoortunitvsvnd() SvncCrmEntitiesT SuncFieldstirait.T. WriteCrmTrait.ol• M UtilsM WebhookC) BatchSvncCollectot(c) RatchSvncRedisSec) Client nho(C) ClocedDea|Stadecc@ DoalFieldsService ryhuospotsyncstrategybase.ong© ProspectCache.phpC) MatchActivitvCrmData.phg* RateLimitexceptio© PaginationConfia.phd225227 C247252253 Cclass Cuient extends BasecLient imolements Hubspotc ientinterfacecaaaaie noospoecxceperon*AthrowsSocialAccountTokenTnvalidExcention* Athrows BadReauestpublic function getPaginatedDataGenerator(array spayloadint Soffset = 0.int &Stotal = 0.?string &$lastRecordId = null): \Generator {return Sthis->paginationService->qetPaqinatedDataGenerator(sthisSoayloadIII 11ISoffset.&: Stotal.: SlastRecordid• Execute a search request against HubSpot CRM objects with rate limiting.— 30=31* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.* @retuen array The search response with 'results','total', 'paging' keys* Athnowe Patel imitFycention When nato limit c hit* Athnowe HubsnotFycention An APT ennoncpublic function search(string SobjectType, array $payload): arraySendpoint = self::BASE_URL . "/crm/v3/obiects/{$objectType}/search":return Sthis->executeRequest(function • use (Sendpoint, $payload) {Sresponse = Sthis->getInstance@->getClient(->request( method:'POST', $endpoint, ['json' => $payL1 1of 8 edits JAccept File &+X Reiect File t86< 1 of 3 files →* Gchrows DealAnExcentionolner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)=custom.log ^A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console [euJ# console [slAGiNg).2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"Concent-lvoe". "apolicacionison charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudeSubDomains: preload")acceot-encodino""access-control-allow-credentials": "false"i."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"7"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To":["{"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545suppont Dally • In sh 14m100% 2• Mon 11 May 11:46:03AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re• RateLimitException.php+0 ..D Cii+7-12Now the middleware - drop DAILY_LIMIT branch, drop MIN RETRY DELAY to 1, keep jitter:• HandleHubspotRateLimit.php+3-15Now MatchActivitvermdata — collapse the two catches into one with instanceof• MatchActivityCrmData.php+8-8All chandes annlied. Cinal state.Summary of this round of changesFlleChangeReasorRateL1m1tException.phpRemoved policy tield & methodsMiddleware doesn't need it; cache TTL handles DAILY naturallyClient.php::executeRequestcache stores scalar int (retry after instead of arraySimpler; no policy to trackClient. php::executeRequestDrop policy from RateLimitException constructorMatch new exception signature; still log policy for observabilityHandleHubspotRateLimit.phpRemoved DAILY_LIMIT branchretryUntil + long cache TTL handle it; saves complexityHandleHubspotRateLimit.phpMIN_RETRY_DELAY 5 →1Honor HinhGnotle setunl cianal. littor dooc tho hord nrotostionHandleHubspotRateLimit.phpNamed JITTER_ SECONDS constantSelf-documentingMatchActivitvGrmData.nhnCollansed dual catch into sinale catch + instancenfMore readable. no awkward emntv rethrow blockHow DAILY_LIMIT now flows (no special case needed)1. HubSpot returns 429 with nolicvlane: DATLY LTMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iobs with delav 1-6s (cheap cvcles, all hit cache)6. After 20 min retrvlintil eynires @) iohs nermanent-fail naturallv7. No special branch. no siob->fail(). no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version• Job retry cycle is faster (delay 1-6s instead of 5-10s) → ~2x more queue cycles per second per worker• More cache hits per second (since cvcles are faster) = but cache GETs are cheao (~0.1ms)• Same throughput ceiling (5 successful calls/s — HubSpot's limit)• Same final outcome (~9k succeed, ~91k fail at T=30min)|MetricPrevious (this round)This roundSucceccful inhs in 20mina.o00O 000Wasted HubSoot APl calls~10.800~10.800Job non evcles/sed~50-100~100-2503 files +73 -43)Accent alliAsk anvthing (84.L)Claude Onus 4.7 MediumW Windsurf Toams 22-1UTF.8io 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16360
|
735
|
7
|
2026-05-11T08:46:06.958900+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489166958_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormFV faVsco.jsroledey© TrackRecordingFileSiz PhostormFV faVsco.jsroledey© TrackRecordingFileSiz© TrackRecordingSizeEnT. ValidateSmitProspect:D AjReports0 Calendarn Conference0 Crm@ bullnornJ close_copperJ Crmobiects• DummyHelpersv HubspotAccountSvncStrate> Actionsn ContactsuncStratem Fields• Malournal1 Metadatalv OpportunitySyncSt>MConcerns.(c) Hubsnotl actMonC HubspotLastMo(C) Hubsnotl actMo(C) Hubsnotl actMo(C) Hubsnotl actMo(C) HubsnotSinaleSo UnhenotCunaCtr© HubspotWebhoov M Padination© HubspotPaginat© PaginationConfi(C) PaqinationState› ProspectSearchstr› D Redisv D ServiceTraitsTOnoortunitvsvnd() SvncCrmEntitiesT SuncFieldstirait.T. WriteCrmTrait.o• M UtilsM WebhookC) BatchSvncCollectot(c) RatchSvncRedisSe(C) ClocedDea|Stadecs@ DoalFieldsService rcodeyhuospotsyncstrategybase.ongC) MatchActivitvCrmData.phg* RateLimitexception© PaginationConfia.phdclass Cuient extends BasecLient imolements Hubspotc ientinterfaceoublic function fetchDispositionField0ptionsO:arravlforeach Scispositions as Sdisoositionif ($disposition['deleted'] |== false) {continue;732Soption['value'] = $disposition['id']:Soption['id'] = $disposition['id'];Soption['label'] = $disposition['label']:Soptions[] = $option;© ProspectCache.php1I 11IIoubuic function fetchooportunitvriel doptions(Field Sfield: arravif (Sfield->isStageField0) {return sthis•fetchopportunitvPinelineStageso:1t Cfield-sispinelinesieldo0fetch@nnortunitvPinelineso:neturn Sthis->fetchPronentv0ntions/obiectTvoe:"deals!. Sfield->aetCrmProviderTdon•* athrows BadRequest* Athnowe HubenotFycentionpublic function makeRequest(string Sendpoint, Smethod = 'GET', Spayload = [J, ?string SqueryString = nulU)— 30=custom.log ^A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console [euJ# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"Concent-lvoe". "apolicacionison charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudeSubDomains: preload")acceot-encodino""access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"7"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To":["{"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545Sresponsen=18hlsr&geitir Accept File *~ Laenreiett Fieequest 1 of 3 files →suppont Dally • In sh 14m100% 2• Mon 11 May 11:46:06U AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re• RateLimitException.php+0 ..D Cii+7-12Now the middleware - drop DAILY_LIMIT branch, drop MIN RETRY DELAY to 1, keep jitter:• HandleHubspotRateLimit.php+3-15Now MatchActivitvermdata — collapse the two catches into one with instanceof• MatchActivityCrmData.php+8-8All chandes annlied. Cinal state.Summary of this round of changesFlleChangeReasorRateL1m1tException.phpRemoved policy tield & methodsMiddleware doesn't need it; cache TTL handles DAILY naturallyclient. php:: executeRequestcache stores scalar int (retry after instead of arraySimpler; no policy to trackClient. php::executeRequestDrop policy from RateLimitException constructorMatch new exception signature; still log policy for observabilityHandleHubspotRateLimit.phpRemoved DAILY_LIMIT branchretryUntil + long cache TTL handle it; saves complexityHandleHubspotRateLimit.phpMIN_RETRY_DELAY 5 →1Honor HinhGnotle setunl cianal. littor dooc tho hord nrotostionHandleHubspotRateLimit.phpNamed JITTER_ SECONDS constantSelf-documentingMatchActivitvGrmData.nhnCollansed dual catch into sinale catch + instancenfMore readable. no awkward emntv rethrow blockHow DAILY_LIMIT now flows (no special case needed)1. HubSpot returns 429 with nolicvlane: DATLY LTMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iobs with delav 1-6s (cheap cvcles, all hit cache)6. After 20 min retrvlintil eynires @) iohs nermanent-fail naturallv7. No special branch. no siob->fail(). no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version• Job retry cycle is faster (delay 1-6s instead of 5-10s) → ~2x more queue cycles per second per worker• More cache hits per second (since cvcles are faster) = but cache GETs are cheao (~0.1ms)•Same throughput ceiling (5 successful calls/s — HubSpot's limit)• Same final outcome (~9k succeed, ~91k fail at T=30min)|MetricPrevious (this round)This roundSucceccful inhs in 20mina.o00O 000Wasted HubSoot APl calls~10.800~10.800Job non evcles/sed~50-100~100-2503 files +73 -43)Accent alliAsk anvthing (84D)Claude Onus 4.7 MediumWN Windsurf Toams 777-1UTF.8io 4 spaces...
|
NULL
|
-4364644001714076346
|
NULL
|
click
|
ocr
|
NULL
|
PhostormFV faVsco.jsroledey© TrackRecordingFileSiz PhostormFV faVsco.jsroledey© TrackRecordingFileSiz© TrackRecordingSizeEnT. ValidateSmitProspect:D AjReports0 Calendarn Conference0 Crm@ bullnornJ close_copperJ Crmobiects• DummyHelpersv HubspotAccountSvncStrate> Actionsn ContactsuncStratem Fields• Malournal1 Metadatalv OpportunitySyncSt>MConcerns.(c) Hubsnotl actMonC HubspotLastMo(C) Hubsnotl actMo(C) Hubsnotl actMo(C) Hubsnotl actMo(C) HubsnotSinaleSo UnhenotCunaCtr© HubspotWebhoov M Padination© HubspotPaginat© PaginationConfi(C) PaqinationState› ProspectSearchstr› D Redisv D ServiceTraitsTOnoortunitvsvnd() SvncCrmEntitiesT SuncFieldstirait.T. WriteCrmTrait.o• M UtilsM WebhookC) BatchSvncCollectot(c) RatchSvncRedisSe(C) ClocedDea|Stadecs@ DoalFieldsService rcodeyhuospotsyncstrategybase.ongC) MatchActivitvCrmData.phg* RateLimitexception© PaginationConfia.phdclass Cuient extends BasecLient imolements Hubspotc ientinterfaceoublic function fetchDispositionField0ptionsO:arravlforeach Scispositions as Sdisoositionif ($disposition['deleted'] |== false) {continue;732Soption['value'] = $disposition['id']:Soption['id'] = $disposition['id'];Soption['label'] = $disposition['label']:Soptions[] = $option;© ProspectCache.php1I 11IIoubuic function fetchooportunitvriel doptions(Field Sfield: arravif (Sfield->isStageField0) {return sthis•fetchopportunitvPinelineStageso:1t Cfield-sispinelinesieldo0fetch@nnortunitvPinelineso:neturn Sthis->fetchPronentv0ntions/obiectTvoe:"deals!. Sfield->aetCrmProviderTdon•* athrows BadRequest* Athnowe HubenotFycentionpublic function makeRequest(string Sendpoint, Smethod = 'GET', Spayload = [J, ?string SqueryString = nulU)— 30=custom.log ^A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console [euJ# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"Concent-lvoe". "apolicacionison charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudeSubDomains: preload")acceot-encodino""access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"7"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To":["{"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545Sresponsen=18hlsr&geitir Accept File *~ Laenreiett Fieequest 1 of 3 files →suppont Dally • In sh 14m100% 2• Mon 11 May 11:46:06U AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re• RateLimitException.php+0 ..D Cii+7-12Now the middleware - drop DAILY_LIMIT branch, drop MIN RETRY DELAY to 1, keep jitter:• HandleHubspotRateLimit.php+3-15Now MatchActivitvermdata — collapse the two catches into one with instanceof• MatchActivityCrmData.php+8-8All chandes annlied. Cinal state.Summary of this round of changesFlleChangeReasorRateL1m1tException.phpRemoved policy tield & methodsMiddleware doesn't need it; cache TTL handles DAILY naturallyclient. php:: executeRequestcache stores scalar int (retry after instead of arraySimpler; no policy to trackClient. php::executeRequestDrop policy from RateLimitException constructorMatch new exception signature; still log policy for observabilityHandleHubspotRateLimit.phpRemoved DAILY_LIMIT branchretryUntil + long cache TTL handle it; saves complexityHandleHubspotRateLimit.phpMIN_RETRY_DELAY 5 →1Honor HinhGnotle setunl cianal. littor dooc tho hord nrotostionHandleHubspotRateLimit.phpNamed JITTER_ SECONDS constantSelf-documentingMatchActivitvGrmData.nhnCollansed dual catch into sinale catch + instancenfMore readable. no awkward emntv rethrow blockHow DAILY_LIMIT now flows (no special case needed)1. HubSpot returns 429 with nolicvlane: DATLY LTMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iobs with delav 1-6s (cheap cvcles, all hit cache)6. After 20 min retrvlintil eynires @) iohs nermanent-fail naturallv7. No special branch. no siob->fail(). no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version• Job retry cycle is faster (delay 1-6s instead of 5-10s) → ~2x more queue cycles per second per worker• More cache hits per second (since cvcles are faster) = but cache GETs are cheao (~0.1ms)•Same throughput ceiling (5 successful calls/s — HubSpot's limit)• Same final outcome (~9k succeed, ~91k fail at T=30min)|MetricPrevious (this round)This roundSucceccful inhs in 20mina.o00O 000Wasted HubSoot APl calls~10.800~10.800Job non evcles/sed~50-100~100-2503 files +73 -43)Accent alliAsk anvthing (84D)Claude Onus 4.7 MediumWN Windsurf Toams 777-1UTF.8io 4 spaces...
|
16358
|
NULL
|
NULL
|
NULL
|
|
16361
|
735
|
8
|
2026-05-11T08:46:09.292755+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489169292_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5641617897080429754
|
-8160223333407913180
|
visual_change
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
PhostormINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-limProiect© TrackRecordingFileSiz© TrackRecordingSizeEnT. ValidateSmitProspect:yhuospotsyncstrategybase.ong© ProspectCache.phpAjReportsC) MatchActivitvCrmData.php*RateLimitexception.p0 Calendarn Conference© PaginationConfia.php0 Crmclass Cuient extends BasecLient imolements Hubspotc ientinterface@ bullnorn> OJ CloseC Copper164>J Crmobiects_ DecorateAcuiviiy• Dummy167) Helpersv D Hubspot168169AccountSvncStrate170>D Actionsla ContactsuncStratet172M Fields• M lournal1741751 Metadatalv OpportunitySyncSt>MConcerns.(c) Hubsnotl actMonC HubspotLastMor(C) Hubsnotl actMo181 G© HubspotLastMor(C) Hubsnotl actMou© HubspotSingleS© HubspotSyncStr© HubspotWebhoc~ M Padination186 G© HubspotPaginat© PaginationConfi(C) PaqinationState> D ProspectSearchStr:› D Redisv D ServiceTraitsT OpportunitySync 194() SvncCrmEntities195 CT SuncFieldstirait.T. WriteCrmTrait.ol197• M UtilsM WebhookC) BatchSvncCollectot(c) RatchSvncRedisSec) Client nhoC) ClocedDea|StadecS@ DealFieldeServicer no/public function parsePolicy(Throwable $e): ?stringif method exists(se.aetResoonseBody'D)return nullShodv = Se->ae+ResnonseRodv0:if (is_string($body)) {$body = json_decode($bodyassociative: true) ?? []if (! is_array($body))return null;Spolicy = Sbody['policyName'] ?? Sbody['policy'] ?? Sbody['context']['policyName'] ?? null:return is string(Spolicy) ? strtoupper(Spolicy) : null:ououc tunction oetranzmumanzversiono: strinapublic function getinstanceo: Factoryreturn new Factorv(ẞoauth?'base unl' => Sthis->haseln1.public function getNewInstance: DiscoverynotunnHubSno+|Cactonv.•cnontoWithAccoccTolen(Cthic-saccoceTokon).* Secondly and daily limits for Hubspot API* Product er:rree & starterHone Cui Men07 Enterfre oe 1 APT adt-on (anu tiern)olner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)— 30A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console leu)# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","CF-Cache-Status": L"DYNAMIC"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudeSubDomains: preload")"access-control-allow-credentials": "false"."server-timing": ["hcid;desc=|"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To":["{"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,"reportco. "cr-nel"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545suppont Dally • In sh 14m100% 2• Mon 11 May 11:46:09U AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re• RateLimitException.php+0 ..D Cii+/ -12Now the middleware - drop DAILY_LIMIT branch, drop MIN RETRY DELAY to 1, keep jitter:• HandleHubspotRateLimit.php+3-15Now MatchActivitvermdata — collapse the two catches into one with instanceof• MatchActivityCrmData.php+8-8All chandes annlied. Cinal state.Summary of this round of changesFlleChangeReasorRateL1m1tException.phpRemoved policy tield & methodsMiddleware doesn't need it; cache TTL handles DAILY naturallyclient. php:: executeRequestcache stores scalar int (retry after instead of arraySimpler; no policy to trackClient. php::executeRequestDrop policy from RateLimitException constructorMatch new exception signature; still log policy for observabilityHandleHubspotRateLimit.phpRemoved DAILY_LIMIT branchretryUntil + long cache TTL handle it; saves complexityHandleHubspotRateLimit.phpMIN_RETRY_DELAY 5 →1Honor HinhGnotle setunl cianal. littor dooc tho hord nrotostionHandleHubspotRateLimit.phpNamed JITTER_ SECONDS constantSelf-documentingMatchActivitvGrmData.nhnCollansed dual catch into sinale catch + instancenfMore readable. no awkward emntv rethrow blockHow DAILY_LIMIT now flows (no special case needed)1. HubSpot returns 429 with nolicvlane: DATLY LTMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iobs with delav 1-6s (cheap cvcles, all hit cache)6. After 20 min retrvlintil eynires @) iohs nermanent-fail naturallv7. No special branch. no siob->fail(). no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version• Job retry cycle is faster (delay 1-6s instead of 5-10s) → ~2x more queue cycles per second per worker• More cache hits per second (since cvcles are faster) = but cache GETs are cheao (~0.1ms)•Same throughput ceiling (5 successful calls/s — HubSpot's limit)• Same final outcome (~9k succeed, ~91k fail at T=30min)MetricPrevious (this round)This roundSucceccful inhs in 20mina.o00O 000Wasted HubSoot APl calls~10.800~10.800Job non evcles/sed~50-100~100-2503 files +73 -43)Accent alliAsk anvthing (84D)+ « CodeClaude Onus 4.7 MediumWN Windsurf Teamo244-1 UTE.Rio 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16363
|
735
|
9
|
2026-05-11T08:46:21.199698+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489181199_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Cache;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"65","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Cache::put($cacheKey, $retryAfter, $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Cache::put($cacheKey, $retryAfter, $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7220615986847313571
|
6378616412348221796
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Cache;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16361
|
NULL
|
NULL
|
NULL
|
|
16364
|
735
|
10
|
2026-05-11T08:46:30.966130+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489190966_m2.jpg...
|
PhpStorm
|
faVsco.js – _ide_helper.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Built-in Preview
Chrome
Firefox
Safari
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
/* @noinspection ALL */
// @formatter:off
// phpcs:ignoreFile
/**
* A helper file for Laravel, to provide autocomplete information to your IDE
* Generated for Laravel 12.33.0.
*
* This file should not be included in your code, only analyzed by your IDE!
*
* @author Barry vd. Heuvel <[EMAIL]>
* @see [URL_WITH_CREDENTIALS] string
* @static
*/
public static function inferBasePath()
{
return \Illuminate\Foundation\Application::inferBasePath();
}
/**
* Get the version number of the application.
*
* @return string
* @static
*/
public static function version()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->version();
}
/**
* Run the given array of bootstrap classes.
*
* @param string[] $bootstrappers
* @return void
* @static
*/
public static function bootstrapWith($bootstrappers)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->bootstrapWith($bootstrappers);
}
/**
* Register a callback to run after loading the environment.
*
* @param \Closure $callback
* @return void
* @static
*/
public static function afterLoadingEnvironment($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->afterLoadingEnvironment($callback);
}
/**
* Register a callback to run before a bootstrapper.
*
* @param string $bootstrapper
* @param \Closure $callback
* @return void
* @static
*/
public static function beforeBootstrapping($bootstrapper, $callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->beforeBootstrapping($bootstrapper, $callback);
}
/**
* Register a callback to run after a bootstrapper.
*
* @param string $bootstrapper
* @param \Closure $callback
* @return void
* @static
*/
public static function afterBootstrapping($bootstrapper, $callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->afterBootstrapping($bootstrapper, $callback);
}
/**
* Determine if the application has been bootstrapped before.
*
* @return bool
* @static
*/
public static function hasBeenBootstrapped()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasBeenBootstrapped();
}
/**
* Set the base path for the application.
*
* @param string $basePath
* @return \Illuminate\Foundation\Application
* @static
*/
public static function setBasePath($basePath)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->setBasePath($basePath);
}
/**
* Get the path to the application "app" directory.
*
* @param string $path
* @return string
* @static
*/
public static function path($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->path($path);
}
/**
* Set the application directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useAppPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useAppPath($path);
}
/**
* Get the base path of the Laravel installation.
*
* @param string $path
* @return string
* @static
*/
public static function basePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->basePath($path);
}
/**
* Get the path to the bootstrap directory.
*
* @param string $path
* @return string
* @static
*/
public static function bootstrapPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->bootstrapPath($path);
}
/**
* Get the path to the service provider list in the bootstrap directory.
*
* @return string
* @static
*/
public static function getBootstrapProvidersPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getBootstrapProvidersPath();
}
/**
* Set the bootstrap file directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useBootstrapPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useBootstrapPath($path);
}
/**
* Get the path to the application configuration files.
*
* @param string $path
* @return string
* @static
*/
public static function configPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->configPath($path);
}
/**
* Set the configuration directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useConfigPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useConfigPath($path);
}
/**
* Get the path to the database directory.
*
* @param string $path
* @return string
* @static
*/
public static function databasePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->databasePath($path);
}
/**
* Set the database directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useDatabasePath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useDatabasePath($path);
}
/**
* Get the path to the language files.
*
* @param string $path
* @return string
* @static
*/
public static function langPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->langPath($path);
}
/**
* Set the language file directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useLangPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useLangPath($path);
}
/**
* Get the path to the public / web directory.
*
* @param string $path
* @return string
* @static
*/
public static function publicPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->publicPath($path);
}
/**
* Set the public / web directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function usePublicPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->usePublicPath($path);
}
/**
* Get the path to the storage directory.
*
* @param string $path
* @return string
* @static
*/
public static function storagePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->storagePath($path);
}
/**
* Set the storage directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useStoragePath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useStoragePath($path);
}
/**
* Get the path to the resources directory.
*
* @param string $path
* @return string
* @static
*/
public static function resourcePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resourcePath($path);
}
/**
* Get the path to the views directory.
*
* This method returns the first configured path in the array of view paths.
*
* @param string $path
* @return string
* @static
*/
public static function viewPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->viewPath($path);
}
/**
* Join the given paths together.
*
* @param string $basePath
* @param string $path
* @return string
* @static
*/
public static function joinPaths($basePath, $path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->joinPaths($basePath, $path);
}
/**
* Get the path to the environment file directory.
*
* @return string
* @static
*/
public static function environmentPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentPath();
}
/**
* Set the directory for the environment file.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useEnvironmentPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useEnvironmentPath($path);
}
/**
* Set the environment file to be loaded during bootstrapping.
*
* @param string $file
* @return \Illuminate\Foundation\Application
* @static
*/
public static function loadEnvironmentFrom($file)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->loadEnvironmentFrom($file);
}
/**
* Get the environment file the application is using.
*
* @return string
* @static
*/
public static function environmentFile()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentFile();
}
/**
* Get the fully qualified path to the environment file.
*
* @return string
* @static
*/
public static function environmentFilePath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentFilePath();
}
/**
* Get or check the current application environment.
*
* @param string|array $environments
* @return string|bool
* @static
*/
public static function environment(...$environments)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environment(...$environments);
}
/**
* Determine if the application is in the local environment.
*
* @return bool
* @static
*/
public static function isLocal()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isLocal();
}
/**
* Determine if the application is in the production environment.
*
* @return bool
* @static
*/
public static function isProduction()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isProduction();
}
/**
* Detect the application's current environment.
*
* @param \Closure $callback
* @return string
* @static
*/
public static function detectEnvironment($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->detectEnvironment($callback);
}
/**
* Determine if the application is running in the console.
*
* @return bool
* @static
*/
public static function runningInConsole()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningInConsole();
}
/**
* Determine if the application is running any of the given console commands.
*
* @param string|array $commands
* @return bool
* @static
*/
public static function runningConsoleCommand(...$commands)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningConsoleCommand(...$commands);
}
/**
* Determine if the application is running unit tests.
*
* @return bool
* @static
*/
public static function runningUnitTests()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningUnitTests();
}
/**
* Determine if the application is running with debug mode enabled.
*
* @return bool
* @static
*/
public static function hasDebugModeEnabled()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasDebugModeEnabled();
}
/**
* Register a new registered listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function registered($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registered($callback);
}
/**
* Register all of the configured providers.
*
* @return void
* @static
*/
public static function registerConfiguredProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerConfiguredProviders();
}
/**
* Register a service provider with the application.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @param bool $force
* @return \Illuminate\Support\ServiceProvider
* @static
*/
public static function register($provider, $force = false)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->register($provider, $force);
}
/**
* Get the registered service provider instance if it exists.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @return \Illuminate\Support\ServiceProvider|null
* @static
*/
public static function getProvider($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getProvider($provider);
}
/**
* Get the registered service provider instances if any exist.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @return array
* @static
*/
public static function getProviders($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getProviders($provider);
}
/**
* Resolve a service provider instance from the class name.
*
* @param string $provider
* @return \Illuminate\Support\ServiceProvider
* @static
*/
public static function resolveProvider($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resolveProvider($provider);
}
/**
* Load and boot all of the remaining deferred providers.
*
* @return void
* @static
*/
public static function loadDeferredProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->loadDeferredProviders();
}
/**
* Load the provider for a deferred service.
*
* @param string $service
* @return void
* @static
*/
public static function loadDeferredProvider($service)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->loadDeferredProvider($service);
}
/**
* Register a deferred provider and service.
*
* @param string $provider
* @param string|null $service
* @return void
* @static
*/
public static function registerDeferredProvider($provider, $service = null)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerDeferredProvider($provider, $service);
}
/**
* Resolve the given type from the container.
*
* @template TClass of object
* @param string|class-string<TClass> $abstract
* @param array $parameters
* @return ($abstract is class-string<TClass> ? TClass : mixed)
* @throws \Illuminate\Contracts\Container\BindingResolutionException
* @static
*/
public static function make($abstract, $parameters = [])
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->make($abstract, $parameters);
}
/**
* Determine if the given abstract type has been bound.
*
* @param string $abstract
* @return bool
* @static
*/
public static function bound($abstract)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->bound($abstract);
}
/**
* Determine if the application has booted.
*
* @return bool
* @static
*/
public static function isBooted()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isBooted();
}
/**
* Boot the application's service providers.
*
* @return void
* @static
*/
public static function boot()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->boot();
}
/**
* Register a new boot listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function booting($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->booting($callback);
}
/**
* Register a new "booted" listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function booted($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->booted($callback);
}
/**
* {@inheritdoc}
*
* @return \Symfony\Component\HttpFoundation\Response
* @static
*/
public static function handle($request, $type = 1, $catch = true)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->handle($request, $type, $catch);
}
/**
* Handle the incoming HTTP request and send the response to the browser.
*
* @param \Illuminate\Http\Request $request
* @return void
* @static
*/
public static function handleRequest($request)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->handleRequest($request);
}
/**
* Handle the incoming Artisan command.
*
* @param \Symfony\Component\Console\Input\InputInterface $input
* @return int
* @static
*/
public static function handleCommand($input)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->handleCommand($input);
}
/**
* Determine if the framework's base configuration should be merged.
*
* @return bool
* @static
*/
public static function shouldMergeFrameworkConfiguration()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->shouldMergeFrameworkConfiguration();
}
/**
* Indicate that the framework's base configuration should not be merged.
*
* @return \Illuminate\Foundation\Application
* @static
*/
public static function dontMergeFrameworkConfiguration()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->dontMergeFrameworkConfiguration();
}
/**
* Determine if middleware has been disabled for the application.
*
* @return bool
* @static
*/
public static function shouldSkipMiddleware()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->shouldSkipMiddleware();
}
/**
* Get the path to the cached services.php file.
*
* @return string
* @static
*/
public static function getCachedServicesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedServicesPath();
}
/**
* Get the path to the cached packages.php file.
*
* @return string
* @static
*/
public static function getCachedPackagesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedPackagesPath();
}
/**
* Determine if the application configuration is cached.
*
* @return bool
* @static
*/
public static function configurationIsCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->configurationIsCached();
}
/**
* Get the path to the configuration cache file.
*
* @return string
* @static
*/
public static function getCachedConfigPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedConfigPath();
}
/**
* Determine if the application routes are cached.
*
* @return bool
* @static
*/
public static function routesAreCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->routesAreCached();
}
/**
* Get the path to the routes cache file.
*
* @return string
* @static
*/
public static function getCachedRoutesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedRoutesPath();
}
/**
* Determine if the application events are cached.
*
* @return bool
* @static
*/
public static function eventsAreCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->eventsAreCached();
}
/**
* Get the path to the events cache file.
*
* @return string
* @static
*/
public static function getCachedEventsPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedEventsPath();
}
/**
* Add new prefix to list of absolute path prefixes.
*
* @param string $prefix
* @return \Illuminate\Foundation\Application
* @static
*/
public static function addAbsoluteCachePathPrefix($prefix)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->addAbsoluteCachePathPrefix($prefix);
}
/**
* Get an instance of the maintenance mode manager implementation.
*
* @return \Illuminate\Contracts\Foundation\MaintenanceMode
* @static
*/
public static function maintenanceMode()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->maintenanceMode();
}
/**
* Determine if the application is currently down for maintenance.
*
* @return bool
* @static
*/
public static function isDownForMaintenance()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isDownForMaintenance();
}
/**
* Throw an HttpException with the given data.
*
* @param int $code
* @param string $message
* @param array $headers
* @return never
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @static
*/
public static function abort($code, $message = '', $headers = [])
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->abort($code, $message, $headers);
}
/**
* Register a terminating callback with the application.
*
* @param callable|string $callback
* @return \Illuminate\Foundation\Application
* @static
*/
public static function terminating($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->terminating($callback);
}
/**
* Terminate the application.
*
* @return void
* @static
*/
public static function terminate()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->terminate();
}
/**
* Get the service providers that have been loaded.
*
* @return array<string, bool>
* @static
*/
public static function getLoadedProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getLoadedProviders();
}
/**
* Determine if the given service provider is loaded.
*
* @param string $provider
* @return bool
* @static
*/
public static function providerIsLoaded($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->providerIsLoaded($provider);
}
/**
* Get the application's deferred services.
*
* @return array
* @static
*/
public static function getDeferredServices()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getDeferredServices();
}
/**
* Set the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function setDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setDeferredServices($services);
}
/**
* Determine if the given service is a deferred service.
*
* @param string $service
* @return bool
* @static
*/
public static function isDeferredService($service)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isDeferredService($service);
}
/**
* Add an array of services to the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function addDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->addDeferredServices($services);
}
/**
* Remove an array of services from the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function removeDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->removeDeferredServices($services);
}
/**
* Configure the real-time facade namespace.
*
* @param string $namespace
* @return void
* @static
*/
public static function provideFacades($namespace)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->provideFacades($namespace);
}
/**
* Get the current application locale.
*
* @return string
* @static
*/
public static function getLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getLocale();
}
/**
* Get the current application locale.
*
* @return string
* @static
*/
public static function currentLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->currentLocale();
}
/**
* Get the current application fallback locale.
*
* @return string
* @static
*/
public static function getFallbackLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getFallbackLocale();
}
/**
* Set the current application locale.
*
* @param string $locale
* @return void
* @static
*/
public static function setLocale($locale)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setLocale($locale);
}
/**
* Set the current application fallback locale.
*
* @param string $fallbackLocale
* @return void
* @static
*/
public static function setFallbackLocale($fallbackLocale)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setFallbackLocale($fallbackLocale);
}
/**
* Determine if the application locale is the given locale.
*
* @param string $locale
* @return bool
* @static
*/
public static function isLocale($locale)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isLocale($locale);
}
/**
* Register the core class aliases in the container.
*
* @return void
* @static
*/
public static function registerCoreContainerAliases()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerCoreContainerAliases();
}
/**
* Flush the container of all bindings and resolved instances.
*
* @return void
* @static
*/
public static function flush()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->flush();
}
/**
* Get the application namespace.
*
* @return string
* @throws \RuntimeException
* @static
*/
public static function getNamespace()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getNamespace();
}
/**
* Define a contextual binding.
*
* @param array|string $concrete
* @return \Illuminate\Contracts\Container\ContextualBindingBuilder
* @static
*/
public static function when($concrete)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->when($concrete);
}
/**
* Define a contextual binding based on an attribute.
*
* @param string $attribute
* @param \Closure $handler
* @return void
* @static
*/
public static function whenHasAttribute($attribute, $handler)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->whenHasAttribute($attribute, $handler);
}
/**
* Returns true if the container can return an entry for the given identifier.
*
* Returns false otherwise.
*
* `has($id)` returning true does not mean that `get($id)` will not throw an exception.
* It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
*
* @return bool
* @param string $id Identifier of the entry to look for.
* @return bool
* @static
*/
public static function has($id)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->has($id);
}
/**
* Determine if the given abstract type has been resolved.
*
* @param string $abstract
* @return bool
* @static
*/
public static function resolved($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resolved($abstract);
}
/**
* Determine if a given type is shared.
*
* @param string $abstract
* @return bool
* @static
*/
public static function isShared($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isShared($abstract);
}
/**
* Determine if a given string is an alias.
*
* @param string $name
* @return bool
* @static
*/
public static function isAlias($name)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isAlias($name);
}
/**
* Register a binding with the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
* @throws \TypeError
* @throws ReflectionException
* @static
*/
public static function bind($abstract, $concrete = null, $shared = false)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bind($abstract, $concrete, $shared);
}
/**
* Determine if the container has a method binding.
*
* @param string $method
* @return bool
* @static
*/
public static function hasMethodBinding($method)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasMethodBinding($method);
}
/**
* Bind a callback to resolve with Container::call.
*
* @param array|string $method
* @param \Closure $callback
* @return void
* @static
*/
public static function bindMethod($method, $callback)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bindMethod($method, $callback);
}
/**
* Get the method binding for the given method.
*
* @param string $method
* @param mixed $instance
* @return mixed
* @static
*/
public static function callMethodBinding($method, $instance)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->callMethodBinding($method, $instance);
}
/**
* Add a contextual binding to the container.
*
* @param string $concrete
* @param \Closure|string $abstract
* @param \Closure|string $implementation
* @return void
* @static
*/
public static function addContextualBinding($concrete, $abstract, $implementation)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->addContextualBinding($concrete, $abstract, $implementation);
}
/**
* Register a binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
* @static
*/
public static function bindIf($abstract, $concrete = null, $shared = false)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bindIf($abstract, $concrete, $shared);
}
/**
* Register a shared binding in the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function singleton($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->singleton($abstract, $concrete);
}
/**
* Register a shared binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function singletonIf($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->singletonIf($abstract, $concrete);
}
/**
* Register a scoped binding in the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function scoped($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->scoped($abstract, $concrete);
}
/**
* Register a scoped binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function scopedIf($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->scopedIf($abstract, $concrete);
}
/**
* "Extend" an abstract type in the container.
*
* @param string $abstract
* @param \Closure $closure
* @return void
* @throws \InvalidArgumentException
* @static
*/
public static function extend($abstract, $closure)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->extend($abstract, $closure);
}
/**
* Register an existing instance as shared in the container.
*
* @template TInstance of mixed
* @param string $abstract
* @param TInstance $instance
* @return TInstance
* @static
*/
public static function instance($abstract, $instance)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->instance($abstract, $instance);
}
/**
* Assign a set of tags to a given binding.
*
* @param array|string $abstracts
* @param mixed $tags
* @return void
* @static
*/
public static function tag($abstracts, $tags)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->tag($abstracts, $tags);
}
/**
* Resolve all of the bindings for a given tag.
*
* @param string $tag
* @return iterable
* @static
*/
public static function tagged($tag)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->tagged($tag);
}
/**
* Alias a type to a different name.
*
* @param string $abstract
* @param string $alias
* @return void
* @throws \LogicException
* @static
*/
public static function alias($abstract, $alias)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->alias($abstract, $alias);
}
/**
* Bind a new callback to an abstract's rebind event.
*
* @param string $abstract
* @param \Closure $callback
* @return mixed
* @static
*/
public static function rebinding($abstract, $callback)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->rebinding($abstract, $callback);
}
/**
* Refresh an instance on the given target and method.
*
* @param string $abstract
* @param mixed $target
* @param string $method
* @return mixed
* @static
*/
public static function refresh($abstract, $target, $method)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->refresh($abstract, $target, $method);
}
/**
* Wrap the given closure such that its dependencies will be injected when executed.
*
* @param \Closure $callback
* @param array $parameters
* @return \Closure
* @static
*/
public static function wrap($callback, $parameters = [])
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->wrap($callback, $parameters);
}
/**
* Call the given Closure / class@method and inject its dependencies.
*
* @param callable|string $callback
* @param array<string, mixed> $parameters
* @param string|null $defaultMethod
* @return mixed
* @throws \InvalidArgumentException
* @static
*/
public static function call($callback, $parameters = [], $defaultMethod = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->call($callback, $parameters, $defaultMethod);
}
/**
* Get a closure to resolve the given type from the container.
*
* @template TClass of object
* @param string|class-string<TClass> $abstract
* @return ($abstract is class-string<TClass> ? \Closure(): TClass : \Closure(): mixed)
* @static
*/
public static function factory($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->factory($abstract);
}
/**
* An alias function name for make().
*
* @template TClass of object
* @param string|class-string<TClass>|callable $abstract
* @param array $parameters
* @return ($abstract is class-string<TClass> ? TClass : mixed)
* @throws \Illuminate\Contracts\Container\BindingResolutionException
* @static
*/
public static function makeWith($abstract, $parameters = [])
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->makeWith($abstract, $parameters);
}
/**
* {@inheritdoc}
*
* @template TClass of object
* @param string|class-string<TClass> $id
* @return ($id is class-string<TClass> ? TClass : mixed)
* @static
*/
public static function get($id)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Built-in Preview","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chrome","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Firefox","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Safari","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n/* @noinspection ALL */\n// @formatter:off\n// phpcs:ignoreFile\n\n/**\n * A helper file for Laravel, to provide autocomplete information to your IDE\n * Generated for Laravel 12.33.0.\n *\n * This file should not be included in your code, only analyzed by your IDE!\n *\n * @author Barry vd. Heuvel <barryvdh@gmail.com>\n * @see https://github.com/barryvdh/laravel-ide-helper\n */\nnamespace Illuminate\\Support\\Facades {\n /**\n * @see \\Illuminate\\Foundation\\Application\n */\n class App {\n /**\n * Begin configuring a new Laravel application instance.\n *\n * @param string|null $basePath\n * @return \\Illuminate\\Foundation\\Configuration\\ApplicationBuilder\n * @static\n */\n public static function configure($basePath = null)\n {\n return \\Illuminate\\Foundation\\Application::configure($basePath);\n }\n\n /**\n * Infer the application's base directory from the environment.\n *\n * @return string\n * @static\n */\n public static function inferBasePath()\n {\n return \\Illuminate\\Foundation\\Application::inferBasePath();\n }\n\n /**\n * Get the version number of the application.\n *\n * @return string\n * @static\n */\n public static function version()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->version();\n }\n\n /**\n * Run the given array of bootstrap classes.\n *\n * @param string[] $bootstrappers\n * @return void\n * @static\n */\n public static function bootstrapWith($bootstrappers)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bootstrapWith($bootstrappers);\n }\n\n /**\n * Register a callback to run after loading the environment.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterLoadingEnvironment($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterLoadingEnvironment($callback);\n }\n\n /**\n * Register a callback to run before a bootstrapper.\n *\n * @param string $bootstrapper\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function beforeBootstrapping($bootstrapper, $callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->beforeBootstrapping($bootstrapper, $callback);\n }\n\n /**\n * Register a callback to run after a bootstrapper.\n *\n * @param string $bootstrapper\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterBootstrapping($bootstrapper, $callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterBootstrapping($bootstrapper, $callback);\n }\n\n /**\n * Determine if the application has been bootstrapped before.\n *\n * @return bool\n * @static\n */\n public static function hasBeenBootstrapped()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasBeenBootstrapped();\n }\n\n /**\n * Set the base path for the application.\n *\n * @param string $basePath\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function setBasePath($basePath)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->setBasePath($basePath);\n }\n\n /**\n * Get the path to the application \"app\" directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function path($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->path($path);\n }\n\n /**\n * Set the application directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useAppPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useAppPath($path);\n }\n\n /**\n * Get the base path of the Laravel installation.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function basePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->basePath($path);\n }\n\n /**\n * Get the path to the bootstrap directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function bootstrapPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->bootstrapPath($path);\n }\n\n /**\n * Get the path to the service provider list in the bootstrap directory.\n *\n * @return string\n * @static\n */\n public static function getBootstrapProvidersPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getBootstrapProvidersPath();\n }\n\n /**\n * Set the bootstrap file directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useBootstrapPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useBootstrapPath($path);\n }\n\n /**\n * Get the path to the application configuration files.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function configPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->configPath($path);\n }\n\n /**\n * Set the configuration directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useConfigPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useConfigPath($path);\n }\n\n /**\n * Get the path to the database directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function databasePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->databasePath($path);\n }\n\n /**\n * Set the database directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useDatabasePath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useDatabasePath($path);\n }\n\n /**\n * Get the path to the language files.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function langPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->langPath($path);\n }\n\n /**\n * Set the language file directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useLangPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useLangPath($path);\n }\n\n /**\n * Get the path to the public / web directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function publicPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->publicPath($path);\n }\n\n /**\n * Set the public / web directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function usePublicPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->usePublicPath($path);\n }\n\n /**\n * Get the path to the storage directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function storagePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->storagePath($path);\n }\n\n /**\n * Set the storage directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useStoragePath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useStoragePath($path);\n }\n\n /**\n * Get the path to the resources directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function resourcePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resourcePath($path);\n }\n\n /**\n * Get the path to the views directory.\n * \n * This method returns the first configured path in the array of view paths.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function viewPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->viewPath($path);\n }\n\n /**\n * Join the given paths together.\n *\n * @param string $basePath\n * @param string $path\n * @return string\n * @static\n */\n public static function joinPaths($basePath, $path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->joinPaths($basePath, $path);\n }\n\n /**\n * Get the path to the environment file directory.\n *\n * @return string\n * @static\n */\n public static function environmentPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentPath();\n }\n\n /**\n * Set the directory for the environment file.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useEnvironmentPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useEnvironmentPath($path);\n }\n\n /**\n * Set the environment file to be loaded during bootstrapping.\n *\n * @param string $file\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function loadEnvironmentFrom($file)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->loadEnvironmentFrom($file);\n }\n\n /**\n * Get the environment file the application is using.\n *\n * @return string\n * @static\n */\n public static function environmentFile()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentFile();\n }\n\n /**\n * Get the fully qualified path to the environment file.\n *\n * @return string\n * @static\n */\n public static function environmentFilePath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentFilePath();\n }\n\n /**\n * Get or check the current application environment.\n *\n * @param string|array $environments\n * @return string|bool\n * @static\n */\n public static function environment(...$environments)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environment(...$environments);\n }\n\n /**\n * Determine if the application is in the local environment.\n *\n * @return bool\n * @static\n */\n public static function isLocal()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isLocal();\n }\n\n /**\n * Determine if the application is in the production environment.\n *\n * @return bool\n * @static\n */\n public static function isProduction()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isProduction();\n }\n\n /**\n * Detect the application's current environment.\n *\n * @param \\Closure $callback\n * @return string\n * @static\n */\n public static function detectEnvironment($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->detectEnvironment($callback);\n }\n\n /**\n * Determine if the application is running in the console.\n *\n * @return bool\n * @static\n */\n public static function runningInConsole()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningInConsole();\n }\n\n /**\n * Determine if the application is running any of the given console commands.\n *\n * @param string|array $commands\n * @return bool\n * @static\n */\n public static function runningConsoleCommand(...$commands)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningConsoleCommand(...$commands);\n }\n\n /**\n * Determine if the application is running unit tests.\n *\n * @return bool\n * @static\n */\n public static function runningUnitTests()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningUnitTests();\n }\n\n /**\n * Determine if the application is running with debug mode enabled.\n *\n * @return bool\n * @static\n */\n public static function hasDebugModeEnabled()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasDebugModeEnabled();\n }\n\n /**\n * Register a new registered listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function registered($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registered($callback);\n }\n\n /**\n * Register all of the configured providers.\n *\n * @return void\n * @static\n */\n public static function registerConfiguredProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerConfiguredProviders();\n }\n\n /**\n * Register a service provider with the application.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @param bool $force\n * @return \\Illuminate\\Support\\ServiceProvider\n * @static\n */\n public static function register($provider, $force = false)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->register($provider, $force);\n }\n\n /**\n * Get the registered service provider instance if it exists.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @return \\Illuminate\\Support\\ServiceProvider|null\n * @static\n */\n public static function getProvider($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getProvider($provider);\n }\n\n /**\n * Get the registered service provider instances if any exist.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @return array\n * @static\n */\n public static function getProviders($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getProviders($provider);\n }\n\n /**\n * Resolve a service provider instance from the class name.\n *\n * @param string $provider\n * @return \\Illuminate\\Support\\ServiceProvider\n * @static\n */\n public static function resolveProvider($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolveProvider($provider);\n }\n\n /**\n * Load and boot all of the remaining deferred providers.\n *\n * @return void\n * @static\n */\n public static function loadDeferredProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->loadDeferredProviders();\n }\n\n /**\n * Load the provider for a deferred service.\n *\n * @param string $service\n * @return void\n * @static\n */\n public static function loadDeferredProvider($service)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->loadDeferredProvider($service);\n }\n\n /**\n * Register a deferred provider and service.\n *\n * @param string $provider\n * @param string|null $service\n * @return void\n * @static\n */\n public static function registerDeferredProvider($provider, $service = null)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerDeferredProvider($provider, $service);\n }\n\n /**\n * Resolve the given type from the container.\n *\n * @template TClass of object\n * @param string|class-string<TClass> $abstract\n * @param array $parameters\n * @return ($abstract is class-string<TClass> ? TClass : mixed)\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function make($abstract, $parameters = [])\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->make($abstract, $parameters);\n }\n\n /**\n * Determine if the given abstract type has been bound.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function bound($abstract)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->bound($abstract);\n }\n\n /**\n * Determine if the application has booted.\n *\n * @return bool\n * @static\n */\n public static function isBooted()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isBooted();\n }\n\n /**\n * Boot the application's service providers.\n *\n * @return void\n * @static\n */\n public static function boot()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->boot();\n }\n\n /**\n * Register a new boot listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function booting($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->booting($callback);\n }\n\n /**\n * Register a new \"booted\" listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function booted($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->booted($callback);\n }\n\n /**\n * {@inheritdoc}\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function handle($request, $type = 1, $catch = true)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->handle($request, $type, $catch);\n }\n\n /**\n * Handle the incoming HTTP request and send the response to the browser.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function handleRequest($request)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->handleRequest($request);\n }\n\n /**\n * Handle the incoming Artisan command.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @return int\n * @static\n */\n public static function handleCommand($input)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->handleCommand($input);\n }\n\n /**\n * Determine if the framework's base configuration should be merged.\n *\n * @return bool\n * @static\n */\n public static function shouldMergeFrameworkConfiguration()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->shouldMergeFrameworkConfiguration();\n }\n\n /**\n * Indicate that the framework's base configuration should not be merged.\n *\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function dontMergeFrameworkConfiguration()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->dontMergeFrameworkConfiguration();\n }\n\n /**\n * Determine if middleware has been disabled for the application.\n *\n * @return bool\n * @static\n */\n public static function shouldSkipMiddleware()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->shouldSkipMiddleware();\n }\n\n /**\n * Get the path to the cached services.php file.\n *\n * @return string\n * @static\n */\n public static function getCachedServicesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedServicesPath();\n }\n\n /**\n * Get the path to the cached packages.php file.\n *\n * @return string\n * @static\n */\n public static function getCachedPackagesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedPackagesPath();\n }\n\n /**\n * Determine if the application configuration is cached.\n *\n * @return bool\n * @static\n */\n public static function configurationIsCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->configurationIsCached();\n }\n\n /**\n * Get the path to the configuration cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedConfigPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedConfigPath();\n }\n\n /**\n * Determine if the application routes are cached.\n *\n * @return bool\n * @static\n */\n public static function routesAreCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->routesAreCached();\n }\n\n /**\n * Get the path to the routes cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedRoutesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedRoutesPath();\n }\n\n /**\n * Determine if the application events are cached.\n *\n * @return bool\n * @static\n */\n public static function eventsAreCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->eventsAreCached();\n }\n\n /**\n * Get the path to the events cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedEventsPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedEventsPath();\n }\n\n /**\n * Add new prefix to list of absolute path prefixes.\n *\n * @param string $prefix\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function addAbsoluteCachePathPrefix($prefix)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->addAbsoluteCachePathPrefix($prefix);\n }\n\n /**\n * Get an instance of the maintenance mode manager implementation.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\MaintenanceMode\n * @static\n */\n public static function maintenanceMode()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->maintenanceMode();\n }\n\n /**\n * Determine if the application is currently down for maintenance.\n *\n * @return bool\n * @static\n */\n public static function isDownForMaintenance()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isDownForMaintenance();\n }\n\n /**\n * Throw an HttpException with the given data.\n *\n * @param int $code\n * @param string $message\n * @param array $headers\n * @return never\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\HttpException\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException\n * @static\n */\n public static function abort($code, $message = '', $headers = [])\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->abort($code, $message, $headers);\n }\n\n /**\n * Register a terminating callback with the application.\n *\n * @param callable|string $callback\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function terminating($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->terminating($callback);\n }\n\n /**\n * Terminate the application.\n *\n * @return void\n * @static\n */\n public static function terminate()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->terminate();\n }\n\n /**\n * Get the service providers that have been loaded.\n *\n * @return array<string, bool>\n * @static\n */\n public static function getLoadedProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getLoadedProviders();\n }\n\n /**\n * Determine if the given service provider is loaded.\n *\n * @param string $provider\n * @return bool\n * @static\n */\n public static function providerIsLoaded($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->providerIsLoaded($provider);\n }\n\n /**\n * Get the application's deferred services.\n *\n * @return array\n * @static\n */\n public static function getDeferredServices()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getDeferredServices();\n }\n\n /**\n * Set the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function setDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setDeferredServices($services);\n }\n\n /**\n * Determine if the given service is a deferred service.\n *\n * @param string $service\n * @return bool\n * @static\n */\n public static function isDeferredService($service)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isDeferredService($service);\n }\n\n /**\n * Add an array of services to the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function addDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->addDeferredServices($services);\n }\n\n /**\n * Remove an array of services from the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function removeDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->removeDeferredServices($services);\n }\n\n /**\n * Configure the real-time facade namespace.\n *\n * @param string $namespace\n * @return void\n * @static\n */\n public static function provideFacades($namespace)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->provideFacades($namespace);\n }\n\n /**\n * Get the current application locale.\n *\n * @return string\n * @static\n */\n public static function getLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getLocale();\n }\n\n /**\n * Get the current application locale.\n *\n * @return string\n * @static\n */\n public static function currentLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentLocale();\n }\n\n /**\n * Get the current application fallback locale.\n *\n * @return string\n * @static\n */\n public static function getFallbackLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getFallbackLocale();\n }\n\n /**\n * Set the current application locale.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setLocale($locale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setLocale($locale);\n }\n\n /**\n * Set the current application fallback locale.\n *\n * @param string $fallbackLocale\n * @return void\n * @static\n */\n public static function setFallbackLocale($fallbackLocale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setFallbackLocale($fallbackLocale);\n }\n\n /**\n * Determine if the application locale is the given locale.\n *\n * @param string $locale\n * @return bool\n * @static\n */\n public static function isLocale($locale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isLocale($locale);\n }\n\n /**\n * Register the core class aliases in the container.\n *\n * @return void\n * @static\n */\n public static function registerCoreContainerAliases()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerCoreContainerAliases();\n }\n\n /**\n * Flush the container of all bindings and resolved instances.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->flush();\n }\n\n /**\n * Get the application namespace.\n *\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function getNamespace()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getNamespace();\n }\n\n /**\n * Define a contextual binding.\n *\n * @param array|string $concrete\n * @return \\Illuminate\\Contracts\\Container\\ContextualBindingBuilder\n * @static\n */\n public static function when($concrete)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->when($concrete);\n }\n\n /**\n * Define a contextual binding based on an attribute.\n *\n * @param string $attribute\n * @param \\Closure $handler\n * @return void\n * @static\n */\n public static function whenHasAttribute($attribute, $handler)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->whenHasAttribute($attribute, $handler);\n }\n\n /**\n * Returns true if the container can return an entry for the given identifier.\n * \n * Returns false otherwise.\n * \n * `has($id)` returning true does not mean that `get($id)` will not throw an exception.\n * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.\n *\n * @return bool\n * @param string $id Identifier of the entry to look for.\n * @return bool\n * @static\n */\n public static function has($id)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->has($id);\n }\n\n /**\n * Determine if the given abstract type has been resolved.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function resolved($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolved($abstract);\n }\n\n /**\n * Determine if a given type is shared.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function isShared($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isShared($abstract);\n }\n\n /**\n * Determine if a given string is an alias.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function isAlias($name)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isAlias($name);\n }\n\n /**\n * Register a binding with the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @param bool $shared\n * @return void\n * @throws \\TypeError\n * @throws ReflectionException\n * @static\n */\n public static function bind($abstract, $concrete = null, $shared = false)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bind($abstract, $concrete, $shared);\n }\n\n /**\n * Determine if the container has a method binding.\n *\n * @param string $method\n * @return bool\n * @static\n */\n public static function hasMethodBinding($method)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasMethodBinding($method);\n }\n\n /**\n * Bind a callback to resolve with Container::call.\n *\n * @param array|string $method\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function bindMethod($method, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bindMethod($method, $callback);\n }\n\n /**\n * Get the method binding for the given method.\n *\n * @param string $method\n * @param mixed $instance\n * @return mixed\n * @static\n */\n public static function callMethodBinding($method, $instance)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->callMethodBinding($method, $instance);\n }\n\n /**\n * Add a contextual binding to the container.\n *\n * @param string $concrete\n * @param \\Closure|string $abstract\n * @param \\Closure|string $implementation\n * @return void\n * @static\n */\n public static function addContextualBinding($concrete, $abstract, $implementation)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->addContextualBinding($concrete, $abstract, $implementation);\n }\n\n /**\n * Register a binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @param bool $shared\n * @return void\n * @static\n */\n public static function bindIf($abstract, $concrete = null, $shared = false)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bindIf($abstract, $concrete, $shared);\n }\n\n /**\n * Register a shared binding in the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function singleton($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->singleton($abstract, $concrete);\n }\n\n /**\n * Register a shared binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function singletonIf($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->singletonIf($abstract, $concrete);\n }\n\n /**\n * Register a scoped binding in the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function scoped($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->scoped($abstract, $concrete);\n }\n\n /**\n * Register a scoped binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function scopedIf($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->scopedIf($abstract, $concrete);\n }\n\n /**\n * \"Extend\" an abstract type in the container.\n *\n * @param string $abstract\n * @param \\Closure $closure\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function extend($abstract, $closure)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->extend($abstract, $closure);\n }\n\n /**\n * Register an existing instance as shared in the container.\n *\n * @template TInstance of mixed\n * @param string $abstract\n * @param TInstance $instance\n * @return TInstance\n * @static\n */\n public static function instance($abstract, $instance)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->instance($abstract, $instance);\n }\n\n /**\n * Assign a set of tags to a given binding.\n *\n * @param array|string $abstracts\n * @param mixed $tags\n * @return void\n * @static\n */\n public static function tag($abstracts, $tags)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->tag($abstracts, $tags);\n }\n\n /**\n * Resolve all of the bindings for a given tag.\n *\n * @param string $tag\n * @return iterable\n * @static\n */\n public static function tagged($tag)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->tagged($tag);\n }\n\n /**\n * Alias a type to a different name.\n *\n * @param string $abstract\n * @param string $alias\n * @return void\n * @throws \\LogicException\n * @static\n */\n public static function alias($abstract, $alias)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->alias($abstract, $alias);\n }\n\n /**\n * Bind a new callback to an abstract's rebind event.\n *\n * @param string $abstract\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function rebinding($abstract, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->rebinding($abstract, $callback);\n }\n\n /**\n * Refresh an instance on the given target and method.\n *\n * @param string $abstract\n * @param mixed $target\n * @param string $method\n * @return mixed\n * @static\n */\n public static function refresh($abstract, $target, $method)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->refresh($abstract, $target, $method);\n }\n\n /**\n * Wrap the given closure such that its dependencies will be injected when executed.\n *\n * @param \\Closure $callback\n * @param array $parameters\n * @return \\Closure\n * @static\n */\n public static function wrap($callback, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->wrap($callback, $parameters);\n }\n\n /**\n * Call the given Closure / class@method and inject its dependencies.\n *\n * @param callable|string $callback\n * @param array<string, mixed> $parameters\n * @param string|null $defaultMethod\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function call($callback, $parameters = [], $defaultMethod = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->call($callback, $parameters, $defaultMethod);\n }\n\n /**\n * Get a closure to resolve the given type from the container.\n *\n * @template TClass of object\n * @param string|class-string<TClass> $abstract\n * @return ($abstract is class-string<TClass> ? \\Closure(): TClass : \\Closure(): mixed)\n * @static\n */\n public static function factory($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->factory($abstract);\n }\n\n /**\n * An alias function name for make().\n *\n * @template TClass of object\n * @param string|class-string<TClass>|callable $abstract\n * @param array $parameters\n * @return ($abstract is class-string<TClass> ? TClass : mixed)\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function makeWith($abstract, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->makeWith($abstract, $parameters);\n }\n\n /**\n * {@inheritdoc}\n *\n * @template TClass of object\n * @param string|class-string<TClass> $id\n * @return ($id is class-string<TClass> ? TClass : mixed)\n * @static\n */\n public static function get($id)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->get($id);\n }\n\n /**\n * Instantiate a concrete instance of the given type.\n *\n * @template TClass of object\n * @param \\Closure(static, array): TClass|class-string<TClass> $concrete\n * @return TClass\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @throws \\Illuminate\\Contracts\\Container\\CircularDependencyException\n * @static\n */\n public static function build($concrete)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->build($concrete);\n }\n\n /**\n * Resolve a dependency based on an attribute.\n *\n * @param \\ReflectionAttribute $attribute\n * @return mixed\n * @static\n */\n public static function resolveFromAttribute($attribute)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolveFromAttribute($attribute);\n }\n\n /**\n * Register a new before resolving callback for all types.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function beforeResolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->beforeResolving($abstract, $callback);\n }\n\n /**\n * Register a new resolving callback.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function resolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->resolving($abstract, $callback);\n }\n\n /**\n * Register a new after resolving callback for all types.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function afterResolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterResolving($abstract, $callback);\n }\n\n /**\n * Register a new after resolving attribute callback for all types.\n *\n * @param string $attribute\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterResolvingAttribute($attribute, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterResolvingAttribute($attribute, $callback);\n }\n\n /**\n * Fire all of the after resolving attribute callbacks.\n *\n * @param \\ReflectionAttribute[] $attributes\n * @param mixed $object\n * @return void\n * @static\n */\n public static function fireAfterResolvingAttributeCallbacks($attributes, $object)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->fireAfterResolvingAttributeCallbacks($attributes, $object);\n }\n\n /**\n * Get the name of the binding the container is currently resolving.\n *\n * @return class-string|string|null\n * @static\n */\n public static function currentlyResolving()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentlyResolving();\n }\n\n /**\n * Get the container's bindings.\n *\n * @return array\n * @static\n */\n public static function getBindings()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getBindings();\n }\n\n /**\n * Get the alias for an abstract if available.\n *\n * @param string $abstract\n * @return string\n * @static\n */\n public static function getAlias($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getAlias($abstract);\n }\n\n /**\n * Remove all of the extender callbacks for a given type.\n *\n * @param string $abstract\n * @return void\n * @static\n */\n public static function forgetExtenders($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetExtenders($abstract);\n }\n\n /**\n * Remove a resolved instance from the instance cache.\n *\n * @param string $abstract\n * @return void\n * @static\n */\n public static function forgetInstance($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetInstance($abstract);\n }\n\n /**\n * Clear all of the instances from the container.\n *\n * @return void\n * @static\n */\n public static function forgetInstances()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetInstances();\n }\n\n /**\n * Clear all of the scoped instances from the container.\n *\n * @return void\n * @static\n */\n public static function forgetScopedInstances()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetScopedInstances();\n }\n\n /**\n * Set the callback which determines the current container environment.\n *\n * @param (callable(array<int, string>|string): bool|string)|null $callback\n * @return void\n * @static\n */\n public static function resolveEnvironmentUsing($callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->resolveEnvironmentUsing($callback);\n }\n\n /**\n * Determine the environment for the container.\n *\n * @param array<int, string>|string $environments\n * @return bool\n * @static\n */\n public static function currentEnvironmentIs($environments)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentEnvironmentIs($environments);\n }\n\n /**\n * Get the globally available instance of the container.\n *\n * @return static\n * @static\n */\n public static function getInstance()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n return \\Illuminate\\Foundation\\Application::getInstance();\n }\n\n /**\n * Set the shared instance of the container.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container|null $container\n * @return \\Illuminate\\Contracts\\Container\\Container|static\n * @static\n */\n public static function setInstance($container = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n return \\Illuminate\\Foundation\\Application::setInstance($container);\n }\n\n /**\n * Determine if a given offset exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Get the value at a given offset.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Set the value at a given offset.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Unset the value at a given offset.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Foundation\\Application::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Foundation\\Application::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Foundation\\Application::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Foundation\\Application::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Foundation\\Console\\Kernel\n */\n class Artisan {\n /**\n * Re-route the Symfony command events to their Laravel counterparts.\n *\n * @internal\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function rerouteSymfonyCommandEvents()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->rerouteSymfonyCommandEvents();\n }\n\n /**\n * Run the console application.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @param \\Symfony\\Component\\Console\\Output\\OutputInterface|null $output\n * @return int\n * @static\n */\n public static function handle($input, $output = null)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->handle($input, $output);\n }\n\n /**\n * Terminate the application.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @param int $status\n * @return void\n * @static\n */\n public static function terminate($input, $status)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->terminate($input, $status);\n }\n\n /**\n * Register a callback to be invoked when the command lifecycle duration exceeds a given amount of time.\n *\n * @param \\DateTimeInterface|\\Carbon\\CarbonInterval|float|int $threshold\n * @param callable $handler\n * @return void\n * @static\n */\n public static function whenCommandLifecycleIsLongerThan($threshold, $handler)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->whenCommandLifecycleIsLongerThan($threshold, $handler);\n }\n\n /**\n * When the command being handled started.\n *\n * @return \\Illuminate\\Support\\Carbon|null\n * @static\n */\n public static function commandStartedAt()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->commandStartedAt();\n }\n\n /**\n * Resolve a console schedule instance.\n *\n * @return \\Illuminate\\Console\\Scheduling\\Schedule\n * @static\n */\n public static function resolveConsoleSchedule()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->resolveConsoleSchedule();\n }\n\n /**\n * Register a Closure based command with the application.\n *\n * @param string $signature\n * @param \\Closure $callback\n * @return \\Illuminate\\Foundation\\Console\\ClosureCommand\n * @static\n */\n public static function command($signature, $callback)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->command($signature, $callback);\n }\n\n /**\n * Register the given command with the console application.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command $command\n * @return void\n * @static\n */\n public static function registerCommand($command)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->registerCommand($command);\n }\n\n /**\n * Run an Artisan console command by name.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command|string $command\n * @param array $parameters\n * @param \\Symfony\\Component\\Console\\Output\\OutputInterface|null $outputBuffer\n * @return int\n * @throws \\Symfony\\Component\\Console\\Exception\\CommandNotFoundException\n * @static\n */\n public static function call($command, $parameters = [], $outputBuffer = null)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->call($command, $parameters, $outputBuffer);\n }\n\n /**\n * Queue the given console command.\n *\n * @param string $command\n * @param array $parameters\n * @return \\Illuminate\\Foundation\\Bus\\PendingDispatch\n * @static\n */\n public static function queue($command, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->queue($command, $parameters);\n }\n\n /**\n * Get all of the commands registered with the console.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->all();\n }\n\n /**\n * Get the output for the last run command.\n *\n * @return string\n * @static\n */\n public static function output()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->output();\n }\n\n /**\n * Bootstrap the application for artisan commands.\n *\n * @return void\n * @static\n */\n public static function bootstrap()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->bootstrap();\n }\n\n /**\n * Bootstrap the application without booting service providers.\n *\n * @return void\n * @static\n */\n public static function bootstrapWithoutBootingProviders()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->bootstrapWithoutBootingProviders();\n }\n\n /**\n * Set the Artisan application instance.\n *\n * @param \\Illuminate\\Console\\Application|null $artisan\n * @return void\n * @static\n */\n public static function setArtisan($artisan)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->setArtisan($artisan);\n }\n\n /**\n * Set the Artisan commands provided by the application.\n *\n * @param array $commands\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommands($commands)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommands($commands);\n }\n\n /**\n * Set the paths that should have their Artisan commands automatically discovered.\n *\n * @param array $paths\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommandPaths($paths)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommandPaths($paths);\n }\n\n /**\n * Set the paths that should have their Artisan \"routes\" automatically discovered.\n *\n * @param array $paths\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommandRoutePaths($paths)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommandRoutePaths($paths);\n }\n\n /**\n * Confirm before proceeding with the action.\n * \n * This method only asks for confirmation in production.\n *\n * @param string $warning\n * @param \\Closure|bool|null $callback\n * @return bool\n * @static\n */\n public static function confirmToProceed($warning = 'Application In Production', $callback = null)\n {\n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->confirmToProceed($warning, $callback);\n }\n\n }\n /**\n * @see \\Illuminate\\Auth\\AuthManager\n * @see \\Illuminate\\Auth\\SessionGuard\n */\n class Auth {\n /**\n * Attempt to get the guard from the local cache.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Auth\\Guard|\\Illuminate\\Contracts\\Auth\\StatefulGuard\n * @static\n */\n public static function guard($name = null)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->guard($name);\n }\n\n /**\n * Create a session based authentication guard.\n *\n * @param string $name\n * @param array $config\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function createSessionDriver($name, $config)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createSessionDriver($name, $config);\n }\n\n /**\n * Create a token based authentication guard.\n *\n * @param string $name\n * @param array $config\n * @return \\Illuminate\\Auth\\TokenGuard\n * @static\n */\n public static function createTokenDriver($name, $config)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createTokenDriver($name, $config);\n }\n\n /**\n * Get the default authentication driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default guard driver the factory should serve.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function shouldUse($name)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n $instance->shouldUse($name);\n }\n\n /**\n * Set the default authentication driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Register a new callback based request guard.\n *\n * @param string $driver\n * @param callable $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function viaRequest($driver, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->viaRequest($driver, $callback);\n }\n\n /**\n * Get the user resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function userResolver()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->userResolver();\n }\n\n /**\n * Set the callback to be used to resolve users.\n *\n * @param \\Closure $userResolver\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function resolveUsersUsing($userResolver)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->resolveUsersUsing($userResolver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Register a custom provider creator Closure.\n *\n * @param string $name\n * @param \\Closure $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function provider($name, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->provider($name, $callback);\n }\n\n /**\n * Determines if any guards have already been resolved.\n *\n * @return bool\n * @static\n */\n public static function hasResolvedGuards()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->hasResolvedGuards();\n }\n\n /**\n * Forget all of the resolved guard instances.\n *\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function forgetGuards()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->forgetGuards();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Create the user provider implementation for the driver.\n *\n * @param string|null $provider\n * @return \\Illuminate\\Contracts\\Auth\\UserProvider|null\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function createUserProvider($provider = null)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createUserProvider($provider);\n }\n\n /**\n * Get the default user provider name.\n *\n * @return string\n * @static\n */\n public static function getDefaultUserProvider()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->getDefaultUserProvider();\n }\n\n /**\n * Get the currently authenticated user.\n *\n * @return \\Jiminny\\Models\\User|null\n * @static\n */\n public static function user()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->user();\n }\n\n /**\n * Get the ID for the currently authenticated user.\n *\n * @return int|string|null\n * @static\n */\n public static function id()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->id();\n }\n\n /**\n * Log a user into the application without sessions or cookies.\n *\n * @param array $credentials\n * @return bool\n * @static\n */\n public static function once($credentials = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->once($credentials);\n }\n\n /**\n * Log the given user ID into the application without sessions or cookies.\n *\n * @param mixed $id\n * @return \\Jiminny\\Models\\User|false\n * @static\n */\n public static function onceUsingId($id)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->onceUsingId($id);\n }\n\n /**\n * Validate a user's credentials.\n *\n * @param array $credentials\n * @return bool\n * @static\n */\n public static function validate($credentials = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->validate($credentials);\n }\n\n /**\n * Attempt to authenticate using HTTP Basic Auth.\n *\n * @param string $field\n * @param array $extraConditions\n * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException\n * @static\n */\n public static function basic($field = 'email', $extraConditions = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->basic($field, $extraConditions);\n }\n\n /**\n * Perform a stateless HTTP Basic login attempt.\n *\n * @param string $field\n * @param array $extraConditions\n * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException\n * @static\n */\n public static function onceBasic($field = 'email', $extraConditions = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->onceBasic($field, $extraConditions);\n }\n\n /**\n * Attempt to authenticate a user using the given credentials.\n *\n * @param array $credentials\n * @param bool $remember\n * @return bool\n * @static\n */\n public static function attempt($credentials = [], $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->attempt($credentials, $remember);\n }\n\n /**\n * Attempt to authenticate a user with credentials and additional callbacks.\n *\n * @param array $credentials\n * @param array|callable|null $callbacks\n * @param bool $remember\n * @return bool\n * @static\n */\n public static function attemptWhen($credentials = [], $callbacks = null, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->attemptWhen($credentials, $callbacks, $remember);\n }\n\n /**\n * Log the given user ID into the application.\n *\n * @param mixed $id\n * @param bool $remember\n * @return \\Jiminny\\Models\\User|false\n * @static\n */\n public static function loginUsingId($id, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->loginUsingId($id, $remember);\n }\n\n /**\n * Log a user into the application.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable $user\n * @param bool $remember\n * @return void\n * @static\n */\n public static function login($user, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->login($user, $remember);\n }\n\n /**\n * Log the user out of the application.\n *\n * @return void\n * @static\n */\n public static function logout()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->logout();\n }\n\n /**\n * Log the user out of the application on their current device only.\n * \n * This method does not cycle the \"remember\" token.\n *\n * @return void\n * @static\n */\n public static function logoutCurrentDevice()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->logoutCurrentDevice();\n }\n\n /**\n * Invalidate other sessions for the current user.\n * \n * The application must be using the AuthenticateSession middleware.\n *\n * @param string $password\n * @return \\Jiminny\\Models\\User|null\n * @throws \\Illuminate\\Auth\\AuthenticationException\n * @static\n */\n public static function logoutOtherDevices($password)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->logoutOtherDevices($password);\n }\n\n /**\n * Register an authentication attempt event listener.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function attempting($callback)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->attempting($callback);\n }\n\n /**\n * Get the last user we attempted to authenticate.\n *\n * @return \\Jiminny\\Models\\User\n * @static\n */\n public static function getLastAttempted()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getLastAttempted();\n }\n\n /**\n * Get a unique identifier for the auth session value.\n *\n * @return string\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getName();\n }\n\n /**\n * Get the name of the cookie used to store the \"recaller\".\n *\n * @return string\n * @static\n */\n public static function getRecallerName()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getRecallerName();\n }\n\n /**\n * Determine if the user was authenticated via \"remember me\" cookie.\n *\n * @return bool\n * @static\n */\n public static function viaRemember()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->viaRemember();\n }\n\n /**\n * Set the number of minutes the remember me cookie should be valid for.\n *\n * @param int $minutes\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setRememberDuration($minutes)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setRememberDuration($minutes);\n }\n\n /**\n * Get the cookie creator instance used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Cookie\\QueueingFactory\n * @throws \\RuntimeException\n * @static\n */\n public static function getCookieJar()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getCookieJar();\n }\n\n /**\n * Set the cookie creator instance used by the guard.\n *\n * @param \\Illuminate\\Contracts\\Cookie\\QueueingFactory $cookie\n * @return void\n * @static\n */\n public static function setCookieJar($cookie)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setCookieJar($cookie);\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setDispatcher($events)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setDispatcher($events);\n }\n\n /**\n * Get the session store used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Session\\Session\n * @static\n */\n public static function getSession()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getSession();\n }\n\n /**\n * Return the currently cached user.\n *\n * @return \\Jiminny\\Models\\User|null\n * @static\n */\n public static function getUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getUser();\n }\n\n /**\n * Set the current user.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable $user\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setUser($user)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setUser($user);\n }\n\n /**\n * Get the current request instance.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Request\n * @static\n */\n public static function getRequest()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getRequest();\n }\n\n /**\n * Set the current request instance.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setRequest($request)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setRequest($request);\n }\n\n /**\n * Get the timebox instance used by the guard.\n *\n * @return \\Illuminate\\Support\\Timebox\n * @static\n */\n public static function getTimebox()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getTimebox();\n }\n\n /**\n * Determine if the current user is authenticated. If not, throw an exception.\n *\n * @return \\Jiminny\\Models\\User\n * @throws \\Illuminate\\Auth\\AuthenticationException\n * @static\n */\n public static function authenticate()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->authenticate();\n }\n\n /**\n * Determine if the guard has a user instance.\n *\n * @return bool\n * @static\n */\n public static function hasUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->hasUser();\n }\n\n /**\n * Determine if the current user is authenticated.\n *\n * @return bool\n * @static\n */\n public static function check()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->check();\n }\n\n /**\n * Determine if the current user is a guest.\n *\n * @return bool\n * @static\n */\n public static function guest()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->guest();\n }\n\n /**\n * Forget the current user.\n *\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function forgetUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->forgetUser();\n }\n\n /**\n * Get the user provider used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Auth\\UserProvider\n * @static\n */\n public static function getProvider()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getProvider();\n }\n\n /**\n * Set the user provider used by the guard.\n *\n * @param \\Illuminate\\Contracts\\Auth\\UserProvider $provider\n * @return void\n * @static\n */\n public static function setProvider($provider)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setProvider($provider);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Auth\\SessionGuard::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Auth\\SessionGuard::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Auth\\SessionGuard::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Auth\\SessionGuard::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\View\\Compilers\\BladeCompiler\n */\n class Blade {\n /**\n * Compile the view at the given path.\n *\n * @param string|null $path\n * @return void\n * @static\n */\n public static function compile($path = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->compile($path);\n }\n\n /**\n * Get the path currently being compiled.\n *\n * @return string\n * @static\n */\n public static function getPath()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getPath();\n }\n\n /**\n * Set the path currently being compiled.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function setPath($path)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->setPath($path);\n }\n\n /**\n * Compile the given Blade template contents.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function compileString($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileString($value);\n }\n\n /**\n * Evaluate and render a Blade string to HTML.\n *\n * @param string $string\n * @param array $data\n * @param bool $deleteCachedView\n * @return string\n * @static\n */\n public static function render($string, $data = [], $deleteCachedView = false)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::render($string, $data, $deleteCachedView);\n }\n\n /**\n * Render a component instance to HTML.\n *\n * @param \\Illuminate\\View\\Component $component\n * @return string\n * @static\n */\n public static function renderComponent($component)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::renderComponent($component);\n }\n\n /**\n * Strip the parentheses from the given expression.\n *\n * @param string $expression\n * @return string\n * @static\n */\n public static function stripParentheses($expression)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->stripParentheses($expression);\n }\n\n /**\n * Register a custom Blade compiler.\n *\n * @param callable $compiler\n * @return void\n * @static\n */\n public static function extend($compiler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->extend($compiler);\n }\n\n /**\n * Get the extensions used by the compiler.\n *\n * @return array\n * @static\n */\n public static function getExtensions()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getExtensions();\n }\n\n /**\n * Register an \"if\" statement directive.\n *\n * @param string $name\n * @param callable $callback\n * @return void\n * @static\n */\n public static function if($name, $callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->if($name, $callback);\n }\n\n /**\n * Check the result of a condition.\n *\n * @param string $name\n * @param mixed $parameters\n * @return bool\n * @static\n */\n public static function check($name, ...$parameters)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->check($name, ...$parameters);\n }\n\n /**\n * Register a class-based component alias directive.\n *\n * @param string $class\n * @param string|null $alias\n * @param string $prefix\n * @return void\n * @static\n */\n public static function component($class, $alias = null, $prefix = '')\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->component($class, $alias, $prefix);\n }\n\n /**\n * Register an array of class-based components.\n *\n * @param array $components\n * @param string $prefix\n * @return void\n * @static\n */\n public static function components($components, $prefix = '')\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->components($components, $prefix);\n }\n\n /**\n * Get the registered class component aliases.\n *\n * @return array\n * @static\n */\n public static function getClassComponentAliases()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getClassComponentAliases();\n }\n\n /**\n * Register a new anonymous component path.\n *\n * @param string $path\n * @param string|null $prefix\n * @return void\n * @static\n */\n public static function anonymousComponentPath($path, $prefix = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->anonymousComponentPath($path, $prefix);\n }\n\n /**\n * Register an anonymous component namespace.\n *\n * @param string $directory\n * @param string|null $prefix\n * @return void\n * @static\n */\n public static function anonymousComponentNamespace($directory, $prefix = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->anonymousComponentNamespace($directory, $prefix);\n }\n\n /**\n * Register a class-based component namespace.\n *\n * @param string $namespace\n * @param string $prefix\n * @return void\n * @static\n */\n public static function componentNamespace($namespace, $prefix)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->componentNamespace($namespace, $prefix);\n }\n\n /**\n * Get the registered anonymous component paths.\n *\n * @return array\n * @static\n */\n public static function getAnonymousComponentPaths()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getAnonymousComponentPaths();\n }\n\n /**\n * Get the registered anonymous component namespaces.\n *\n * @return array\n * @static\n */\n public static function getAnonymousComponentNamespaces()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getAnonymousComponentNamespaces();\n }\n\n /**\n * Get the registered class component namespaces.\n *\n * @return array\n * @static\n */\n public static function getClassComponentNamespaces()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getClassComponentNamespaces();\n }\n\n /**\n * Register a component alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function aliasComponent($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->aliasComponent($path, $alias);\n }\n\n /**\n * Register an include alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function include($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->include($path, $alias);\n }\n\n /**\n * Register an include alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function aliasInclude($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->aliasInclude($path, $alias);\n }\n\n /**\n * Register a handler for custom directives, binding the handler to the compiler.\n *\n * @param string $name\n * @param callable $handler\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function bindDirective($name, $handler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->bindDirective($name, $handler);\n }\n\n /**\n * Register a handler for custom directives.\n *\n * @param string $name\n * @param callable $handler\n * @param bool $bind\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function directive($name, $handler, $bind = false)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->directive($name, $handler, $bind);\n }\n\n /**\n * Get the list of custom directives.\n *\n * @return array\n * @static\n */\n public static function getCustomDirectives()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getCustomDirectives();\n }\n\n /**\n * Indicate that the following callable should be used to prepare strings for compilation.\n *\n * @param callable $callback\n * @return \\Illuminate\\View\\Compilers\\BladeCompiler\n * @static\n */\n public static function prepareStringsForCompilationUsing($callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->prepareStringsForCompilationUsing($callback);\n }\n\n /**\n * Register a new precompiler.\n *\n * @param callable $precompiler\n * @return void\n * @static\n */\n public static function precompiler($precompiler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->precompiler($precompiler);\n }\n\n /**\n * Execute the given callback using a custom echo format.\n *\n * @param string $format\n * @param callable $callback\n * @return string\n * @static\n */\n public static function usingEchoFormat($format, $callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->usingEchoFormat($format, $callback);\n }\n\n /**\n * Set the echo format to be used by the compiler.\n *\n * @param string $format\n * @return void\n * @static\n */\n public static function setEchoFormat($format)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->setEchoFormat($format);\n }\n\n /**\n * Set the \"echo\" format to double encode entities.\n *\n * @return void\n * @static\n */\n public static function withDoubleEncoding()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withDoubleEncoding();\n }\n\n /**\n * Set the \"echo\" format to not double encode entities.\n *\n * @return void\n * @static\n */\n public static function withoutDoubleEncoding()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withoutDoubleEncoding();\n }\n\n /**\n * Indicate that component tags should not be compiled.\n *\n * @return void\n * @static\n */\n public static function withoutComponentTags()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withoutComponentTags();\n }\n\n /**\n * Get the path to the compiled version of a view.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function getCompiledPath($path)\n {\n //Method inherited from \\Illuminate\\View\\Compilers\\Compiler \n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getCompiledPath($path);\n }\n\n /**\n * Determine if the view at the given path is expired.\n *\n * @param string $path\n * @return bool\n * @throws \\ErrorException\n * @static\n */\n public static function isExpired($path)\n {\n //Method inherited from \\Illuminate\\View\\Compilers\\Compiler \n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->isExpired($path);\n }\n\n /**\n * Get a new component hash for a component name.\n *\n * @param string $component\n * @return string\n * @static\n */\n public static function newComponentHash($component)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::newComponentHash($component);\n }\n\n /**\n * Compile a class component opening.\n *\n * @param string $component\n * @param string $alias\n * @param string $data\n * @param string $hash\n * @return string\n * @static\n */\n public static function compileClassComponentOpening($component, $alias, $data, $hash)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::compileClassComponentOpening($component, $alias, $data, $hash);\n }\n\n /**\n * Compile the end-component statements into valid PHP.\n *\n * @return string\n * @static\n */\n public static function compileEndComponentClass()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEndComponentClass();\n }\n\n /**\n * Sanitize the given component attribute value.\n *\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function sanitizeComponentAttribute($value)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::sanitizeComponentAttribute($value);\n }\n\n /**\n * Compile an end-once block into valid PHP.\n *\n * @return string\n * @static\n */\n public static function compileEndOnce()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEndOnce();\n }\n\n /**\n * Add a handler to be executed before echoing a given class.\n *\n * @param string|callable $class\n * @param callable|null $handler\n * @return void\n * @static\n */\n public static function stringable($class, $handler = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->stringable($class, $handler);\n }\n\n /**\n * Compile Blade echos into valid PHP.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function compileEchos($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEchos($value);\n }\n\n /**\n * Apply the echo handler for the value if it exists.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function applyEchoHandler($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->applyEchoHandler($value);\n }\n\n }\n /**\n * @method static mixed auth(\\Illuminate\\Http\\Request $request)\n * @method static mixed validAuthenticationResponse(\\Illuminate\\Http\\Request $request, mixed $result)\n * @method static void broadcast(array $channels, string $event, array $payload = [])\n * @method static array|null resolveAuthenticatedUser(\\Illuminate\\Http\\Request $request)\n * @method static void resolveAuthenticatedUserUsing(\\Closure $callback)\n * @method static \\Illuminate\\Broadcasting\\Broadcasters\\Broadcaster channel(\\Illuminate\\Contracts\\Broadcasting\\HasBroadcastChannel|string $channel, callable|string $callback, array $options = [])\n * @method static \\Illuminate\\Support\\Collection getChannels()\n * @see \\Illuminate\\Broadcasting\\BroadcastManager\n * @see \\Illuminate\\Broadcasting\\Broadcasters\\Broadcaster\n */\n class Broadcast {\n /**\n * Register the routes for handling broadcast channel authentication and sockets.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function routes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->routes($attributes);\n }\n\n /**\n * Register the routes for handling broadcast user authentication.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function userRoutes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->userRoutes($attributes);\n }\n\n /**\n * Register the routes for handling broadcast authentication and sockets.\n * \n * Alias of \"routes\" method.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function channelRoutes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->channelRoutes($attributes);\n }\n\n /**\n * Get the socket ID for the given request.\n *\n * @param \\Illuminate\\Http\\Request|null $request\n * @return string|null\n * @static\n */\n public static function socket($request = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->socket($request);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given channels.\n *\n * @static\n */\n public static function on($channels)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->on($channels);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given private channels.\n *\n * @static\n */\n public static function private($channel)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->private($channel);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given presence channels.\n *\n * @static\n */\n public static function presence($channel)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->presence($channel);\n }\n\n /**\n * Begin broadcasting an event.\n *\n * @param mixed $event\n * @return \\Illuminate\\Broadcasting\\PendingBroadcast\n * @static\n */\n public static function event($event = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->event($event);\n }\n\n /**\n * Queue the given event for broadcast.\n *\n * @param mixed $event\n * @return void\n * @static\n */\n public static function queue($event)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->queue($event);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @static\n */\n public static function connection($driver = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->connection($driver);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function driver($name = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->driver($name);\n }\n\n /**\n * Get a Pusher instance for the given configuration.\n *\n * @param array $config\n * @return \\Pusher\\Pusher\n * @static\n */\n public static function pusher($config)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->pusher($config);\n }\n\n /**\n * Get an Ably instance for the given configuration.\n *\n * @param array $config\n * @return \\Ably\\AblyRest\n * @static\n */\n public static function ably($config)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->ably($config);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Disconnect the given disk and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function forgetDrivers()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->forgetDrivers();\n }\n\n }\n /**\n * @see \\Illuminate\\Bus\\Dispatcher\n * @see \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n */\n class Bus {\n /**\n * Dispatch a command to its appropriate handler.\n *\n * @param mixed $command\n * @return mixed\n * @static\n */\n public static function dispatch($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatch($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler in the current process.\n * \n * Queueable jobs will be dispatched to the \"sync\" queue.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return mixed\n * @static\n */\n public static function dispatchSync($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchSync($command, $handler);\n }\n\n /**\n * Dispatch a command to its appropriate handler in the current process without using the synchronous queue.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return mixed\n * @static\n */\n public static function dispatchNow($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchNow($command, $handler);\n }\n\n /**\n * Attempt to find the batch with the given ID.\n *\n * @param string $batchId\n * @return \\Illuminate\\Bus\\Batch|null\n * @static\n */\n public static function findBatch($batchId)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->findBatch($batchId);\n }\n\n /**\n * Create a new batch of queueable jobs.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $jobs\n * @return \\Illuminate\\Bus\\PendingBatch\n * @static\n */\n public static function batch($jobs)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->batch($jobs);\n }\n\n /**\n * Create a new chain of queueable jobs.\n *\n * @param \\Illuminate\\Support\\Collection|array|null $jobs\n * @return \\Illuminate\\Foundation\\Bus\\PendingChain\n * @static\n */\n public static function chain($jobs = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->chain($jobs);\n }\n\n /**\n * Determine if the given command has a handler.\n *\n * @param mixed $command\n * @return bool\n * @static\n */\n public static function hasCommandHandler($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->hasCommandHandler($command);\n }\n\n /**\n * Retrieve the handler for a command.\n *\n * @param mixed $command\n * @return mixed\n * @static\n */\n public static function getCommandHandler($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->getCommandHandler($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler behind a queue.\n *\n * @param mixed $command\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function dispatchToQueue($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchToQueue($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler after the current process.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return void\n * @static\n */\n public static function dispatchAfterResponse($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n $instance->dispatchAfterResponse($command, $handler);\n }\n\n /**\n * Set the pipes through which commands should be piped before dispatching.\n *\n * @param array $pipes\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function pipeThrough($pipes)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->pipeThrough($pipes);\n }\n\n /**\n * Map a command to a handler.\n *\n * @param array $map\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function map($map)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->map($map);\n }\n\n /**\n * Allow dispatching after responses.\n *\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function withDispatchingAfterResponses()\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->withDispatchingAfterResponses();\n }\n\n /**\n * Disable dispatching after responses.\n *\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function withoutDispatchingAfterResponses()\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->withoutDispatchingAfterResponses();\n }\n\n /**\n * Specify the jobs that should be dispatched instead of faked.\n *\n * @param array|string $jobsToDispatch\n * @return \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n * @static\n */\n public static function except($jobsToDispatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->except($jobsToDispatch);\n }\n\n /**\n * Assert if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatched($command, $callback);\n }\n\n /**\n * Assert if a job was pushed exactly once.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedOnce($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedOnce($command);\n }\n\n /**\n * Assert if a job was pushed a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatched($command, $callback);\n }\n\n /**\n * Assert that no jobs were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingDispatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingDispatched();\n }\n\n /**\n * Assert if a job was explicitly dispatched synchronously based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedSync($command, $callback);\n }\n\n /**\n * Assert if a job was pushed synchronously a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedSyncTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedSyncTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatchedSync($command, $callback);\n }\n\n /**\n * Assert if a job was dispatched after the response was sent based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Assert if a job was pushed after the response was sent a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedAfterResponseTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedAfterResponseTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Assert if a chain of jobs was dispatched.\n *\n * @param array $expectedChain\n * @return void\n * @static\n */\n public static function assertChained($expectedChain)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertChained($expectedChain);\n }\n\n /**\n * Assert no chained jobs was dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingChained()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingChained();\n }\n\n /**\n * Assert if a job was dispatched with an empty chain based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedWithoutChain($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedWithoutChain($command, $callback);\n }\n\n /**\n * Create a new assertion about a chained batch.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Support\\Testing\\Fakes\\ChainedBatchTruthTest\n * @static\n */\n public static function chainedBatch($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->chainedBatch($callback);\n }\n\n /**\n * Assert if a batch was dispatched based on a truth-test callback.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function assertBatched($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertBatched($callback);\n }\n\n /**\n * Assert the number of batches that have been dispatched.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertBatchCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertBatchCount($count);\n }\n\n /**\n * Assert that no batched jobs were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingBatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingBatched();\n }\n\n /**\n * Assert that no jobs were dispatched, chained, or batched.\n *\n * @return void\n * @static\n */\n public static function assertNothingPlaced()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingPlaced();\n }\n\n /**\n * Get all of the jobs matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatched($command, $callback);\n }\n\n /**\n * Get all of the jobs dispatched synchronously matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedSync($command, $callback);\n }\n\n /**\n * Get all of the jobs dispatched after the response was sent matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Get all of the pending batches matching a truth-test callback.\n *\n * @param callable $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function batched($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->batched($callback);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatched($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatched($command);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatchedSync($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatchedSync($command);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatchedAfterResponse($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatchedAfterResponse($command);\n }\n\n /**\n * Dispatch an empty job batch for testing.\n *\n * @param string $name\n * @return \\Illuminate\\Bus\\Batch\n * @static\n */\n public static function dispatchFakeBatch($name = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchFakeBatch($name);\n }\n\n /**\n * Record the fake pending batch dispatch.\n *\n * @param \\Illuminate\\Bus\\PendingBatch $pendingBatch\n * @return \\Illuminate\\Bus\\Batch\n * @static\n */\n public static function recordPendingBatch($pendingBatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->recordPendingBatch($pendingBatch);\n }\n\n /**\n * Specify if commands should be serialized and restored when being batched.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the batches that have been dispatched.\n *\n * @return array\n * @static\n */\n public static function dispatchedBatches()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedBatches();\n }\n\n }\n /**\n * @see \\Illuminate\\Cache\\CacheManager\n * @see \\Illuminate\\Cache\\Repository\n */\n class Cache {\n /**\n * Get a cache store instance by name, wrapped in a repository.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function store($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->store($name);\n }\n\n /**\n * Get a cache driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Get a memoized cache driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function memo($driver = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->memo($driver);\n }\n\n /**\n * Resolve the given store.\n *\n * @param string $name\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function resolve($name)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->resolve($name);\n }\n\n /**\n * Build a cache repository with the given configuration.\n *\n * @param array $config\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new cache repository with the given implementation.\n *\n * @param \\Illuminate\\Contracts\\Cache\\Store $store\n * @param array $config\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function repository($store, $config = [])\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->repository($store, $config);\n }\n\n /**\n * Re-set the event dispatcher on all resolved cache repositories.\n *\n * @return void\n * @static\n */\n public static function refreshEventDispatcher()\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->refreshEventDispatcher();\n }\n\n /**\n * Get the default cache driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default cache driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Unset the given driver instances.\n *\n * @param array|string|null $name\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function forgetDriver($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->forgetDriver($name);\n }\n\n /**\n * Disconnect the given driver and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Determine if an item exists in the cache.\n *\n * @param array|string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if an item doesn't exist in the cache.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->missing($key);\n }\n\n /**\n * Retrieve an item from the cache by key.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Retrieve multiple items from the cache by key.\n * \n * Items not found in the cache will have a null value.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function many($keys)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->many($keys);\n }\n\n /**\n * Obtains multiple cache items by their unique keys.\n *\n * @return iterable\n * @param iterable<string> $keys A list of keys that can be obtained in a single operation.\n * @param mixed $default Default value to return for keys that do not exist.\n * @return iterable<string, mixed> A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $keys is neither an array nor a Traversable,\n * or if any of the $keys are not a legal value.\n * @static\n */\n public static function getMultiple($keys, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getMultiple($keys, $default);\n }\n\n /**\n * Retrieve an item from the cache and delete it.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Store an item in the cache.\n *\n * @param array|string $key\n * @param mixed $value\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function put($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->put($key, $value, $ttl);\n }\n\n /**\n * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.\n *\n * @return bool\n * @param string $key The key of the item to store.\n * @param mixed $value The value of the item to store, must be serializable.\n * @param null|int|\\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and\n * the driver supports TTL then the library may set a default value\n * for it or let the driver take care of that.\n * @return bool True on success and false on failure.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if the $key string is not a legal value.\n * @static\n */\n public static function set($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->set($key, $value, $ttl);\n }\n\n /**\n * Store multiple items in the cache for a given number of seconds.\n *\n * @param array $values\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function putMany($values, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->putMany($values, $ttl);\n }\n\n /**\n * Persists a set of key => value pairs in the cache, with an optional TTL.\n *\n * @return bool\n * @param iterable $values A list of key => value pairs for a multiple-set operation.\n * @param null|int|\\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and\n * the driver supports TTL then the library may set a default value\n * for it or let the driver take care of that.\n * @return bool True on success and false on failure.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $values is neither an array nor a Traversable,\n * or if any of the $values are not a legal value.\n * @static\n */\n public static function setMultiple($values, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setMultiple($values, $ttl);\n }\n\n /**\n * Store an item in the cache if the key does not exist.\n *\n * @param string $key\n * @param mixed $value\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function add($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->add($key, $value, $ttl);\n }\n\n /**\n * Increment the value of an item in the cache.\n *\n * @param string $key\n * @param mixed $value\n * @return int|bool\n * @static\n */\n public static function increment($key, $value = 1)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->increment($key, $value);\n }\n\n /**\n * Decrement the value of an item in the cache.\n *\n * @param string $key\n * @param mixed $value\n * @return int|bool\n * @static\n */\n public static function decrement($key, $value = 1)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->decrement($key, $value);\n }\n\n /**\n * Store an item in the cache indefinitely.\n *\n * @param string $key\n * @param mixed $value\n * @return bool\n * @static\n */\n public static function forever($key, $value)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->forever($key, $value);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure|\\DateTimeInterface|\\DateInterval|int|null $ttl\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function remember($key, $ttl, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->remember($key, $ttl, $callback);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result forever.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function sear($key, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->sear($key, $callback);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result forever.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function rememberForever($key, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->rememberForever($key, $callback);\n }\n\n /**\n * Retrieve an item from the cache by key, refreshing it in the background if it is stale.\n *\n * @template TCacheValue\n * @param string $key\n * @param array{ 0: \\DateTimeInterface|\\DateInterval|int, 1: \\DateTimeInterface|\\DateInterval|int } $ttl\n * @param (callable(): TCacheValue) $callback\n * @param array{ seconds?: int, owner?: string }|null $lock\n * @param bool $alwaysDefer\n * @return TCacheValue\n * @static\n */\n public static function flexible($key, $ttl, $callback, $lock = null, $alwaysDefer = false)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->flexible($key, $ttl, $callback, $lock, $alwaysDefer);\n }\n\n /**\n * Remove an item from the cache.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function forget($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->forget($key);\n }\n\n /**\n * Delete an item from the cache by its unique key.\n *\n * @return bool\n * @param string $key The unique cache key of the item to delete.\n * @return bool True if the item was successfully removed. False if there was an error.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if the $key string is not a legal value.\n * @static\n */\n public static function delete($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->delete($key);\n }\n\n /**\n * Deletes multiple cache items in a single operation.\n *\n * @return bool\n * @param iterable<string> $keys A list of string-based keys to be deleted.\n * @return bool True if the items were successfully removed. False if there was an error.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $keys is neither an array nor a Traversable,\n * or if any of the $keys are not a legal value.\n * @static\n */\n public static function deleteMultiple($keys)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->deleteMultiple($keys);\n }\n\n /**\n * Wipes clean the entire cache's keys.\n *\n * @return bool\n * @return bool True on success and false on failure.\n * @static\n */\n public static function clear()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->clear();\n }\n\n /**\n * Begin executing a new tags operation if the store supports it.\n *\n * @param mixed $names\n * @return \\Illuminate\\Cache\\TaggedCache\n * @throws \\BadMethodCallException\n * @static\n */\n public static function tags($names)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->tags($names);\n }\n\n /**\n * Get the name of the cache store.\n *\n * @return string|null\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getName();\n }\n\n /**\n * Determine if the current store supports tags.\n *\n * @return bool\n * @static\n */\n public static function supportsTags()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->supportsTags();\n }\n\n /**\n * Get the default cache time.\n *\n * @return int|null\n * @static\n */\n public static function getDefaultCacheTime()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getDefaultCacheTime();\n }\n\n /**\n * Set the default cache time in seconds.\n *\n * @param int|null $seconds\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function setDefaultCacheTime($seconds)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setDefaultCacheTime($seconds);\n }\n\n /**\n * Get the cache store implementation.\n *\n * @return \\Illuminate\\Contracts\\Cache\\Store\n * @static\n */\n public static function getStore()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getStore();\n }\n\n /**\n * Set the cache store implementation.\n *\n * @param \\Illuminate\\Contracts\\Cache\\Store $store\n * @return static\n * @static\n */\n public static function setStore($store)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setStore($store);\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher|null\n * @static\n */\n public static function getEventDispatcher()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getEventDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setEventDispatcher($events)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->setEventDispatcher($events);\n }\n\n /**\n * Determine if a cached value exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Retrieve an item from the cache by key.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Store an item in the cache for the default time.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Remove an item from the cache.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Cache\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Cache\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Cache\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Cache\\Repository::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Get a lock instance.\n *\n * @param string $name\n * @param int $seconds\n * @param string|null $owner\n * @return \\Illuminate\\Contracts\\Cache\\Lock\n * @static\n */\n public static function lock($name, $seconds = 0, $owner = null)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->lock($name, $seconds, $owner);\n }\n\n /**\n * Restore a lock instance using the owner identifier.\n *\n * @param string $name\n * @param string $owner\n * @return \\Illuminate\\Contracts\\Cache\\Lock\n * @static\n */\n public static function restoreLock($name, $owner)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->restoreLock($name, $owner);\n }\n\n /**\n * Remove all items from the cache.\n *\n * @return bool\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->flush();\n }\n\n /**\n * Remove all expired tag set entries.\n *\n * @return void\n * @static\n */\n public static function flushStaleTags()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->flushStaleTags();\n }\n\n /**\n * Get the Redis connection instance.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function connection()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->connection();\n }\n\n /**\n * Get the Redis connection instance that should be used to manage locks.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function lockConnection()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->lockConnection();\n }\n\n /**\n * Specify the name of the connection that should be used to store data.\n *\n * @param string $connection\n * @return void\n * @static\n */\n public static function setConnection($connection)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->setConnection($connection);\n }\n\n /**\n * Specify the name of the connection that should be used to manage locks.\n *\n * @param string $connection\n * @return \\Illuminate\\Cache\\RedisStore\n * @static\n */\n public static function setLockConnection($connection)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->setLockConnection($connection);\n }\n\n /**\n * Get the Redis database instance.\n *\n * @return \\Illuminate\\Contracts\\Redis\\Factory\n * @static\n */\n public static function getRedis()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->getRedis();\n }\n\n /**\n * Get the cache key prefix.\n *\n * @return string\n * @static\n */\n public static function getPrefix()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->getPrefix();\n }\n\n /**\n * Set the cache key prefix.\n *\n * @param string $prefix\n * @return void\n * @static\n */\n public static function setPrefix($prefix)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->setPrefix($prefix);\n }\n\n }\n /**\n * @method static array run(\\Closure|array $tasks)\n * @method static \\Illuminate\\Support\\Defer\\DeferredCallback defer(\\Closure|array $tasks)\n * @see \\Illuminate\\Concurrency\\ConcurrencyManager\n */\n class Concurrency {\n /**\n * Get a driver instance by name.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function driver($name = null)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->driver($name);\n }\n\n /**\n * Create an instance of the process concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\ProcessDriver\n * @static\n */\n public static function createProcessDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createProcessDriver($config);\n }\n\n /**\n * Create an instance of the fork concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\ForkDriver\n * @throws \\RuntimeException\n * @static\n */\n public static function createForkDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createForkDriver($config);\n }\n\n /**\n * Create an instance of the sync concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\SyncDriver\n * @static\n */\n public static function createSyncDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createSyncDriver($config);\n }\n\n /**\n * Get the default instance name.\n *\n * @return string\n * @static\n */\n public static function getDefaultInstance()\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->getDefaultInstance();\n }\n\n /**\n * Set the default instance name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultInstance($name)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n $instance->setDefaultInstance($name);\n }\n\n /**\n * Get the instance specific configuration.\n *\n * @param string $name\n * @return array\n * @static\n */\n public static function getInstanceConfig($name)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->getInstanceConfig($name);\n }\n\n /**\n * Get an instance by name.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function instance($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->instance($name);\n }\n\n /**\n * Unset the given instances.\n *\n * @param array|string|null $name\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function forgetInstance($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->forgetInstance($name);\n }\n\n /**\n * Disconnect the given instance and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom instance creator Closure.\n *\n * @param string $name\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function extend($name, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->extend($name, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function setApplication($app)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->setApplication($app);\n }\n\n }\n /**\n * @see \\Illuminate\\Config\\Repository\n */\n class Config {\n /**\n * Determine if the given configuration value exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Get the specified configuration value.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get many configuration values.\n *\n * @param array<string|int,mixed> $keys\n * @return array<string,mixed>\n * @static\n */\n public static function getMany($keys)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->getMany($keys);\n }\n\n /**\n * Get the specified string configuration value.\n *\n * @param string $key\n * @param (\\Closure():(string|null))|string|null $default\n * @return string\n * @static\n */\n public static function string($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->string($key, $default);\n }\n\n /**\n * Get the specified integer configuration value.\n *\n * @param string $key\n * @param (\\Closure():(int|null))|int|null $default\n * @return int\n * @static\n */\n public static function integer($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->integer($key, $default);\n }\n\n /**\n * Get the specified float configuration value.\n *\n * @param string $key\n * @param (\\Closure():(float|null))|float|null $default\n * @return float\n * @static\n */\n public static function float($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->float($key, $default);\n }\n\n /**\n * Get the specified boolean configuration value.\n *\n * @param string $key\n * @param (\\Closure():(bool|null))|bool|null $default\n * @return bool\n * @static\n */\n public static function boolean($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->boolean($key, $default);\n }\n\n /**\n * Get the specified array configuration value.\n *\n * @param string $key\n * @param (\\Closure():(array<array-key, mixed>|null))|array<array-key, mixed>|null $default\n * @return array<array-key, mixed>\n * @static\n */\n public static function array($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->array($key, $default);\n }\n\n /**\n * Get the specified array configuration value as a collection.\n *\n * @param string $key\n * @param (\\Closure():(array<array-key, mixed>|null))|array<array-key, mixed>|null $default\n * @return Collection<array-key, mixed>\n * @static\n */\n public static function collection($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->collection($key, $default);\n }\n\n /**\n * Set a given configuration value.\n *\n * @param array|string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function set($key, $value = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->set($key, $value);\n }\n\n /**\n * Prepend a value onto an array configuration value.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function prepend($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->prepend($key, $value);\n }\n\n /**\n * Push a value onto an array configuration value.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function push($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->push($key, $value);\n }\n\n /**\n * Get all of the configuration items for the application.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->all();\n }\n\n /**\n * Determine if the given configuration option exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Get a configuration option.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Set a configuration option.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Unset a configuration option.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Config\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Config\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Config\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Config\\Repository::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Log\\Context\\Repository\n */\n class Context {\n /**\n * Determine if the given key exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if the given key is missing.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->missing($key);\n }\n\n /**\n * Determine if the given key exists within the hidden context data.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hasHidden($key);\n }\n\n /**\n * Determine if the given key is missing within the hidden context data.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missingHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->missingHidden($key);\n }\n\n /**\n * Retrieve all the context data.\n *\n * @return array<string, mixed>\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->all();\n }\n\n /**\n * Retrieve all the hidden context data.\n *\n * @return array<string, mixed>\n * @static\n */\n public static function allHidden()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->allHidden();\n }\n\n /**\n * Retrieve the given key's value.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Retrieve the given key's hidden value.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getHidden($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->getHidden($key, $default);\n }\n\n /**\n * Retrieve the given key's value and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Retrieve the given key's hidden value and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pullHidden($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pullHidden($key, $default);\n }\n\n /**\n * Retrieve only the values of the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->only($keys);\n }\n\n /**\n * Retrieve only the hidden values of the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function onlyHidden($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->onlyHidden($keys);\n }\n\n /**\n * Retrieve all values except those with the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->except($keys);\n }\n\n /**\n * Retrieve all hidden values except those with the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function exceptHidden($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->exceptHidden($keys);\n }\n\n /**\n * Add a context value.\n *\n * @param string|array<string, mixed> $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function add($key, $value = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->add($key, $value);\n }\n\n /**\n * Add a hidden context value.\n *\n * @param string|array<string, mixed> $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addHidden($key, $value = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addHidden($key, $value);\n }\n\n /**\n * Add a context value if it does not exist yet, and return the value.\n *\n * @param string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function remember($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->remember($key, $value);\n }\n\n /**\n * Add a hidden context value if it does not exist yet, and return the value.\n *\n * @param string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function rememberHidden($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->rememberHidden($key, $value);\n }\n\n /**\n * Forget the given context key.\n *\n * @param string|array<int, string> $key\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function forget($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->forget($key);\n }\n\n /**\n * Forget the given hidden context key.\n *\n * @param string|array<int, string> $key\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function forgetHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->forgetHidden($key);\n }\n\n /**\n * Add a context value if it does not exist yet.\n *\n * @param string $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addIf($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addIf($key, $value);\n }\n\n /**\n * Add a hidden context value if it does not exist yet.\n *\n * @param string $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addHiddenIf($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addHiddenIf($key, $value);\n }\n\n /**\n * Push the given values onto the key's stack.\n *\n * @param string $key\n * @param mixed $values\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function push($key, ...$values)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->push($key, ...$values);\n }\n\n /**\n * Pop the latest value from the key's stack.\n *\n * @param string $key\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function pop($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pop($key);\n }\n\n /**\n * Push the given hidden values onto the key's stack.\n *\n * @param string $key\n * @param mixed $values\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function pushHidden($key, ...$values)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pushHidden($key, ...$values);\n }\n\n /**\n * Pop the latest hidden value from the key's stack.\n *\n * @param string $key\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function popHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->popHidden($key);\n }\n\n /**\n * Increment a context counter.\n *\n * @param string $key\n * @param int $amount\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function increment($key, $amount = 1)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->increment($key, $amount);\n }\n\n /**\n * Decrement a context counter.\n *\n * @param string $key\n * @param int $amount\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function decrement($key, $amount = 1)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->decrement($key, $amount);\n }\n\n /**\n * Determine if the given value is in the given stack.\n *\n * @param string $key\n * @param mixed $value\n * @param bool $strict\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function stackContains($key, $value, $strict = false)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->stackContains($key, $value, $strict);\n }\n\n /**\n * Determine if the given value is in the given hidden stack.\n *\n * @param string $key\n * @param mixed $value\n * @param bool $strict\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function hiddenStackContains($key, $value, $strict = false)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hiddenStackContains($key, $value, $strict);\n }\n\n /**\n * Run the callback function with the given context values and restore the original context state when complete.\n *\n * @param callable $callback\n * @param array<string, mixed> $data\n * @param array<string, mixed> $hidden\n * @return mixed\n * @throws \\Throwable\n * @static\n */\n public static function scope($callback, $data = [], $hidden = [])\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->scope($callback, $data, $hidden);\n }\n\n /**\n * Determine if the repository is empty.\n *\n * @return bool\n * @static\n */\n public static function isEmpty()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->isEmpty();\n }\n\n /**\n * Execute the given callback when context is about to be dehydrated.\n *\n * @param callable $callback\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function dehydrating($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->dehydrating($callback);\n }\n\n /**\n * Execute the given callback when context has been hydrated.\n *\n * @param callable $callback\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function hydrated($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hydrated($callback);\n }\n\n /**\n * Handle unserialize exceptions using the given callback.\n *\n * @param callable|null $callback\n * @return static\n * @static\n */\n public static function handleUnserializeExceptionsUsing($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->handleUnserializeExceptionsUsing($callback);\n }\n\n /**\n * Flush all context data.\n *\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->flush();\n }\n\n /**\n * Dehydrate the context data.\n *\n * @internal\n * @return \\Illuminate\\Log\\Context\\?array\n * @static\n */\n public static function dehydrate()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->dehydrate();\n }\n\n /**\n * Hydrate the context instance.\n *\n * @internal\n * @param \\Illuminate\\Log\\Context\\?array $context\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function hydrate($context)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hydrate($context);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Log\\Context\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Log\\Context\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Log\\Context\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Log\\Context\\Repository::flushMacros();\n }\n\n /**\n * Restore the model from the model identifier instance.\n *\n * @param \\Illuminate\\Contracts\\Database\\ModelIdentifier $value\n * @return \\Illuminate\\Database\\Eloquent\\Model\n * @static\n */\n public static function restoreModel($value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->restoreModel($value);\n }\n\n }\n /**\n * @see \\Illuminate\\Cookie\\CookieJar\n */\n class Cookie {\n /**\n * Create a new cookie instance.\n *\n * @param string $name\n * @param string $value\n * @param int $minutes\n * @param string|null $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param bool $httpOnly\n * @param bool $raw\n * @param string|null $sameSite\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->make($name, $value, $minutes, $path, $domain, $secure, $httpOnly, $raw, $sameSite);\n }\n\n /**\n * Create a cookie that lasts \"forever\" (400 days).\n *\n * @param string $name\n * @param string $value\n * @param string|null $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param bool $httpOnly\n * @param bool $raw\n * @param string|null $sameSite\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function forever($name, $value, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->forever($name, $value, $path, $domain, $secure, $httpOnly, $raw, $sameSite);\n }\n\n /**\n * Expire the given cookie.\n *\n * @param string $name\n * @param string|null $path\n * @param string|null $domain\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function forget($name, $path = null, $domain = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->forget($name, $path, $domain);\n }\n\n /**\n * Determine if a cookie has been queued.\n *\n * @param string $key\n * @param string|null $path\n * @return bool\n * @static\n */\n public static function hasQueued($key, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->hasQueued($key, $path);\n }\n\n /**\n * Get a queued cookie instance.\n *\n * @param string $key\n * @param mixed $default\n * @param string|null $path\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie|null\n * @static\n */\n public static function queued($key, $default = null, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->queued($key, $default, $path);\n }\n\n /**\n * Queue a cookie to send with the next response.\n *\n * @param mixed $parameters\n * @return void\n * @static\n */\n public static function queue(...$parameters)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->queue(...$parameters);\n }\n\n /**\n * Queue a cookie to expire with the next response.\n *\n * @param string $name\n * @param string|null $path\n * @param string|null $domain\n * @return void\n * @static\n */\n public static function expire($name, $path = null, $domain = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->expire($name, $path, $domain);\n }\n\n /**\n * Remove a cookie from the queue.\n *\n * @param string $name\n * @param string|null $path\n * @return void\n * @static\n */\n public static function unqueue($name, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->unqueue($name, $path);\n }\n\n /**\n * Set the default path and domain for the jar.\n *\n * @param string $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param string|null $sameSite\n * @return \\Illuminate\\Cookie\\CookieJar\n * @static\n */\n public static function setDefaultPathAndDomain($path, $domain, $secure = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->setDefaultPathAndDomain($path, $domain, $secure, $sameSite);\n }\n\n /**\n * Get the cookies which have been queued for the next request.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie[]\n * @static\n */\n public static function getQueuedCookies()\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->getQueuedCookies();\n }\n\n /**\n * Flush the cookies which have been queued for the next request.\n *\n * @return \\Illuminate\\Cookie\\CookieJar\n * @static\n */\n public static function flushQueuedCookies()\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->flushQueuedCookies();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Cookie\\CookieJar::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Cookie\\CookieJar::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Cookie\\CookieJar::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Cookie\\CookieJar::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Encryption\\Encrypter\n */\n class Crypt {\n /**\n * Determine if the given key and cipher combination is valid.\n *\n * @param string $key\n * @param string $cipher\n * @return bool\n * @static\n */\n public static function supported($key, $cipher)\n {\n return \\Illuminate\\Encryption\\Encrypter::supported($key, $cipher);\n }\n\n /**\n * Create a new encryption key for the given cipher.\n *\n * @param string $cipher\n * @return string\n * @static\n */\n public static function generateKey($cipher)\n {\n return \\Illuminate\\Encryption\\Encrypter::generateKey($cipher);\n }\n\n /**\n * Encrypt the given value.\n *\n * @param mixed $value\n * @param bool $serialize\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n * @static\n */\n public static function encrypt($value, $serialize = true)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->encrypt($value, $serialize);\n }\n\n /**\n * Encrypt a string without serialization.\n *\n * @param string $value\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n * @static\n */\n public static function encryptString($value)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->encryptString($value);\n }\n\n /**\n * Decrypt the given value.\n *\n * @param string $payload\n * @param bool $unserialize\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n * @static\n */\n public static function decrypt($payload, $unserialize = true)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->decrypt($payload, $unserialize);\n }\n\n /**\n * Decrypt the given string without unserialization.\n *\n * @param string $payload\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n * @static\n */\n public static function decryptString($payload)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->decryptString($payload);\n }\n\n /**\n * Get the encryption key that the encrypter is currently using.\n *\n * @return string\n * @static\n */\n public static function getKey()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getKey();\n }\n\n /**\n * Get the current encryption key and all previous encryption keys.\n *\n * @return array\n * @static\n */\n public static function getAllKeys()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getAllKeys();\n }\n\n /**\n * Get the previous encryption keys.\n *\n * @return array\n * @static\n */\n public static function getPreviousKeys()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getPreviousKeys();\n }\n\n /**\n * Set the previous / legacy encryption keys that should be utilized if decryption fails.\n *\n * @param array $keys\n * @return \\Illuminate\\Encryption\\Encrypter\n * @static\n */\n public static function previousKeys($keys)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->previousKeys($keys);\n }\n\n }\n /**\n * @see \\Illuminate\\Database\\DatabaseManager\n */\n class DB {\n /**\n * Get a database connection instance.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Build a database connection instance from the given configuration.\n *\n * @param array $config\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Calculate the dynamic connection name for an on-demand connection based on its configuration.\n *\n * @param array $config\n * @return string\n * @static\n */\n public static function calculateDynamicConnectionName($config)\n {\n return \\Illuminate\\Database\\DatabaseManager::calculateDynamicConnectionName($config);\n }\n\n /**\n * Get a database connection instance from the given configuration.\n *\n * @param \\UnitEnum|string $name\n * @param array $config\n * @param bool $force\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function connectUsing($name, $config, $force = false)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->connectUsing($name, $config, $force);\n }\n\n /**\n * Disconnect from the given database and remove from local cache.\n *\n * @param \\UnitEnum|string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Disconnect from the given database.\n *\n * @param \\UnitEnum|string|null $name\n * @return void\n * @static\n */\n public static function disconnect($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->disconnect($name);\n }\n\n /**\n * Reconnect to the given database.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function reconnect($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->reconnect($name);\n }\n\n /**\n * Set the default database connection for the callback execution.\n *\n * @param \\UnitEnum|string $name\n * @param callable $callback\n * @return mixed\n * @static\n */\n public static function usingConnection($name, $callback)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->usingConnection($name, $callback);\n }\n\n /**\n * Get the default connection name.\n *\n * @return string\n * @static\n */\n public static function getDefaultConnection()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->getDefaultConnection();\n }\n\n /**\n * Set the default connection name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultConnection($name)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->setDefaultConnection($name);\n }\n\n /**\n * Get all of the supported drivers.\n *\n * @return string[]\n * @static\n */\n public static function supportedDrivers()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->supportedDrivers();\n }\n\n /**\n * Get all of the drivers that are actually available.\n *\n * @return string[]\n * @static\n */\n public static function availableDrivers()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->availableDrivers();\n }\n\n /**\n * Register an extension connection resolver.\n *\n * @param string $name\n * @param callable $resolver\n * @return void\n * @static\n */\n public static function extend($name, $resolver)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->extend($name, $resolver);\n }\n\n /**\n * Remove an extension connection resolver.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function forgetExtension($name)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->forgetExtension($name);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array<string, \\Illuminate\\Database\\Connection>\n * @static\n */\n public static function getConnections()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->getConnections();\n }\n\n /**\n * Set the database reconnector callback.\n *\n * @param callable $reconnector\n * @return void\n * @static\n */\n public static function setReconnector($reconnector)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->setReconnector($reconnector);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Database\\DatabaseManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Database\\DatabaseManager::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Database\\DatabaseManager::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Database\\DatabaseManager::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Database\\DatabaseManager::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Get a human-readable name for the given connection driver.\n *\n * @return string\n * @static\n */\n public static function getDriverTitle()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDriverTitle();\n }\n\n /**\n * Determine if the connected database is a MariaDB database.\n *\n * @return bool\n * @static\n */\n public static function isMaria()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->isMaria();\n }\n\n /**\n * Get the server version for the connection.\n *\n * @return string\n * @static\n */\n public static function getServerVersion()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getServerVersion();\n }\n\n /**\n * Get a schema builder instance for the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\MariaDbBuilder\n * @static\n */\n public static function getSchemaBuilder()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaBuilder();\n }\n\n /**\n * Get the schema state for the connection.\n *\n * @param \\Illuminate\\Filesystem\\Filesystem|null $files\n * @param callable|null $processFactory\n * @return \\Illuminate\\Database\\Schema\\MariaDbSchemaState\n * @static\n */\n public static function getSchemaState($files = null, $processFactory = null)\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaState($files, $processFactory);\n }\n\n /**\n * Run an insert statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @param string|null $sequence\n * @return bool\n * @static\n */\n public static function insert($query, $bindings = [], $sequence = null)\n {\n //Method inherited from \\Illuminate\\Database\\MySqlConnection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->insert($query, $bindings, $sequence);\n }\n\n /**\n * Get the connection's last insert ID.\n *\n * @return string|int|null\n * @static\n */\n public static function getLastInsertId()\n {\n //Method inherited from \\Illuminate\\Database\\MySqlConnection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getLastInsertId();\n }\n\n /**\n * Set the query grammar to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultQueryGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultQueryGrammar();\n }\n\n /**\n * Set the schema grammar to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultSchemaGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultSchemaGrammar();\n }\n\n /**\n * Set the query post processor to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultPostProcessor()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultPostProcessor();\n }\n\n /**\n * Begin a fluent query against a database table.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|\\UnitEnum|string $table\n * @param string|null $as\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function table($table, $as = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->table($table, $as);\n }\n\n /**\n * Get a new query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function query()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->query();\n }\n\n /**\n * Run a select statement and return a single result.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return mixed\n * @static\n */\n public static function selectOne($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectOne($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement and return the first column of the first row.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return mixed\n * @throws \\Illuminate\\Database\\MultipleColumnsSelectedException\n * @static\n */\n public static function scalar($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->scalar($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return array\n * @static\n */\n public static function selectFromWriteConnection($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectFromWriteConnection($query, $bindings);\n }\n\n /**\n * Run a select statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return array\n * @static\n */\n public static function select($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->select($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database and returns all of the result sets.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return array\n * @static\n */\n public static function selectResultSets($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectResultSets($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database and returns a generator.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return \\Generator<int, \\stdClass>\n * @static\n */\n public static function cursor($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->cursor($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run an update statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function update($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->update($query, $bindings);\n }\n\n /**\n * Run a delete statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function delete($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->delete($query, $bindings);\n }\n\n /**\n * Execute an SQL statement and return the boolean result.\n *\n * @param string $query\n * @param array $bindings\n * @return bool\n * @static\n */\n public static function statement($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->statement($query, $bindings);\n }\n\n /**\n * Run an SQL statement and get the number of rows affected.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function affectingStatement($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->affectingStatement($query, $bindings);\n }\n\n /**\n * Run a raw, unprepared query against the PDO connection.\n *\n * @param string $query\n * @return bool\n * @static\n */\n public static function unprepared($query)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->unprepared($query);\n }\n\n /**\n * Get the number of open connections for the database.\n *\n * @return int|null\n * @static\n */\n public static function threadCount()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->threadCount();\n }\n\n /**\n * Execute the given callback in \"dry run\" mode.\n *\n * @param (\\Closure(\\Illuminate\\Database\\Connection): mixed) $callback\n * @return \\Illuminate\\Database\\array{query: string, bindings: array, time: float|null}[]\n * @static\n */\n public static function pretend($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->pretend($callback);\n }\n\n /**\n * Execute the given callback without \"pretending\".\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutPretending($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->withoutPretending($callback);\n }\n\n /**\n * Bind values to their parameters in the given statement.\n *\n * @param \\PDOStatement $statement\n * @param array $bindings\n * @return void\n * @static\n */\n public static function bindValues($statement, $bindings)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->bindValues($statement, $bindings);\n }\n\n /**\n * Prepare the query bindings for execution.\n *\n * @param array $bindings\n * @return array\n * @static\n */\n public static function prepareBindings($bindings)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->prepareBindings($bindings);\n }\n\n /**\n * Log a query in the connection's query log.\n *\n * @param string $query\n * @param array $bindings\n * @param float|null $time\n * @return void\n * @static\n */\n public static function logQuery($query, $bindings, $time = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->logQuery($query, $bindings, $time);\n }\n\n /**\n * Register a callback to be invoked when the connection queries for longer than a given amount of time.\n *\n * @param \\DateTimeInterface|\\Carbon\\CarbonInterval|float|int $threshold\n * @param (callable(\\Illuminate\\Database\\Connection, \\Illuminate\\Database\\Events\\QueryExecuted): mixed) $handler\n * @return void\n * @static\n */\n public static function whenQueryingForLongerThan($threshold, $handler)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->whenQueryingForLongerThan($threshold, $handler);\n }\n\n /**\n * Allow all the query duration handlers to run again, even if they have already run.\n *\n * @return void\n * @static\n */\n public static function allowQueryDurationHandlersToRunAgain()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->allowQueryDurationHandlersToRunAgain();\n }\n\n /**\n * Get the duration of all run queries in milliseconds.\n *\n * @return float\n * @static\n */\n public static function totalQueryDuration()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->totalQueryDuration();\n }\n\n /**\n * Reset the duration of all run queries.\n *\n * @return void\n * @static\n */\n public static function resetTotalQueryDuration()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->resetTotalQueryDuration();\n }\n\n /**\n * Reconnect to the database if a PDO connection is missing.\n *\n * @return void\n * @static\n */\n public static function reconnectIfMissingConnection()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->reconnectIfMissingConnection();\n }\n\n /**\n * Register a hook to be run just before a database transaction is started.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function beforeStartingTransaction($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->beforeStartingTransaction($callback);\n }\n\n /**\n * Register a hook to be run just before a database query is executed.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function beforeExecuting($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->beforeExecuting($callback);\n }\n\n /**\n * Register a database query listener with the connection.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function listen($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->listen($callback);\n }\n\n /**\n * Get a new raw query expression.\n *\n * @param mixed $value\n * @return \\Illuminate\\Contracts\\Database\\Query\\Expression\n * @static\n */\n public static function raw($value)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->raw($value);\n }\n\n /**\n * Escape a value for safe SQL embedding.\n *\n * @param string|float|int|bool|null $value\n * @param bool $binary\n * @return string\n * @static\n */\n public static function escape($value, $binary = false)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->escape($value, $binary);\n }\n\n /**\n * Determine if the database connection has modified any database records.\n *\n * @return bool\n * @static\n */\n public static function hasModifiedRecords()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->hasModifiedRecords();\n }\n\n /**\n * Indicate if any records have been modified.\n *\n * @param bool $value\n * @return void\n * @static\n */\n public static function recordsHaveBeenModified($value = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->recordsHaveBeenModified($value);\n }\n\n /**\n * Set the record modification state.\n *\n * @param bool $value\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setRecordModificationState($value)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setRecordModificationState($value);\n }\n\n /**\n * Reset the record modification state.\n *\n * @return void\n * @static\n */\n public static function forgetRecordModificationState()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->forgetRecordModificationState();\n }\n\n /**\n * Indicate that the connection should use the write PDO connection for reads.\n *\n * @param bool $value\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function useWriteConnectionWhenReading($value = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->useWriteConnectionWhenReading($value);\n }\n\n /**\n * Get the current PDO connection.\n *\n * @return \\PDO\n * @static\n */\n public static function getPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getPdo();\n }\n\n /**\n * Get the current PDO connection parameter without executing any reconnect logic.\n *\n * @return \\PDO|\\Closure|null\n * @static\n */\n public static function getRawPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawPdo();\n }\n\n /**\n * Get the current PDO connection used for reading.\n *\n * @return \\PDO\n * @static\n */\n public static function getReadPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getReadPdo();\n }\n\n /**\n * Get the current read PDO connection parameter without executing any reconnect logic.\n *\n * @return \\PDO|\\Closure|null\n * @static\n */\n public static function getRawReadPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawReadPdo();\n }\n\n /**\n * Set the PDO connection.\n *\n * @param \\PDO|\\Closure|null $pdo\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setPdo($pdo)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setPdo($pdo);\n }\n\n /**\n * Set the PDO connection used for reading.\n *\n * @param \\PDO|\\Closure|null $pdo\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setReadPdo($pdo)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setReadPdo($pdo);\n }\n\n /**\n * Get the database connection name.\n *\n * @return string|null\n * @static\n */\n public static function getName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getName();\n }\n\n /**\n * Get the database connection full name.\n *\n * @return string|null\n * @static\n */\n public static function getNameWithReadWriteType()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getNameWithReadWriteType();\n }\n\n /**\n * Get an option from the configuration options.\n *\n * @param string|null $option\n * @return mixed\n * @static\n */\n public static function getConfig($option = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getConfig($option);\n }\n\n /**\n * Get the PDO driver name.\n *\n * @return string\n * @static\n */\n public static function getDriverName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDriverName();\n }\n\n /**\n * Get the query grammar used by the connection.\n *\n * @return \\Illuminate\\Database\\Query\\Grammars\\Grammar\n * @static\n */\n public static function getQueryGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getQueryGrammar();\n }\n\n /**\n * Set the query grammar used by the connection.\n *\n * @param \\Illuminate\\Database\\Query\\Grammars\\Grammar $grammar\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setQueryGrammar($grammar)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setQueryGrammar($grammar);\n }\n\n /**\n * Get the schema grammar used by the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\Grammars\\Grammar\n * @static\n */\n public static function getSchemaGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaGrammar();\n }\n\n /**\n * Set the schema grammar used by the connection.\n *\n * @param \\Illuminate\\Database\\Schema\\Grammars\\Grammar $grammar\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setSchemaGrammar($grammar)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setSchemaGrammar($grammar);\n }\n\n /**\n * Get the query post processor used by the connection.\n *\n * @return \\Illuminate\\Database\\Query\\Processors\\Processor\n * @static\n */\n public static function getPostProcessor()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getPostProcessor();\n }\n\n /**\n * Set the query post processor used by the connection.\n *\n * @param \\Illuminate\\Database\\Query\\Processors\\Processor $processor\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setPostProcessor($processor)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setPostProcessor($processor);\n }\n\n /**\n * Get the event dispatcher used by the connection.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getEventDispatcher()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getEventDispatcher();\n }\n\n /**\n * Set the event dispatcher instance on the connection.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setEventDispatcher($events)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setEventDispatcher($events);\n }\n\n /**\n * Unset the event dispatcher for this connection.\n *\n * @return void\n * @static\n */\n public static function unsetEventDispatcher()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->unsetEventDispatcher();\n }\n\n /**\n * Set the transaction manager instance on the connection.\n *\n * @param \\Illuminate\\Database\\DatabaseTransactionsManager $manager\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setTransactionManager($manager)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setTransactionManager($manager);\n }\n\n /**\n * Unset the transaction manager for this connection.\n *\n * @return void\n * @static\n */\n public static function unsetTransactionManager()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->unsetTransactionManager();\n }\n\n /**\n * Determine if the connection is in a \"dry run\".\n *\n * @return bool\n * @static\n */\n public static function pretending()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->pretending();\n }\n\n /**\n * Get the connection query log.\n *\n * @return \\Illuminate\\Database\\array{query: string, bindings: array, time: float|null}[]\n * @static\n */\n public static function getQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getQueryLog();\n }\n\n /**\n * Get the connection query log with embedded bindings.\n *\n * @return array\n * @static\n */\n public static function getRawQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawQueryLog();\n }\n\n /**\n * Clear the query log.\n *\n * @return void\n * @static\n */\n public static function flushQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->flushQueryLog();\n }\n\n /**\n * Enable the query log on the connection.\n *\n * @return void\n * @static\n */\n public static function enableQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->enableQueryLog();\n }\n\n /**\n * Disable the query log on the connection.\n *\n * @return void\n * @static\n */\n public static function disableQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->disableQueryLog();\n }\n\n /**\n * Determine whether we're logging queries.\n *\n * @return bool\n * @static\n */\n public static function logging()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->logging();\n }\n\n /**\n * Get the name of the connected database.\n *\n * @return string\n * @static\n */\n public static function getDatabaseName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDatabaseName();\n }\n\n /**\n * Set the name of the connected database.\n *\n * @param string $database\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setDatabaseName($database)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setDatabaseName($database);\n }\n\n /**\n * Set the read / write type of the connection.\n *\n * @param string|null $readWriteType\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setReadWriteType($readWriteType)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setReadWriteType($readWriteType);\n }\n\n /**\n * Get the table prefix for the connection.\n *\n * @return string\n * @static\n */\n public static function getTablePrefix()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getTablePrefix();\n }\n\n /**\n * Set the table prefix in use by the connection.\n *\n * @param string $prefix\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setTablePrefix($prefix)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setTablePrefix($prefix);\n }\n\n /**\n * Execute the given callback without table prefix.\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutTablePrefix($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->withoutTablePrefix($callback);\n }\n\n /**\n * Register a connection resolver.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function resolverFor($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n \\Illuminate\\Database\\MariaDbConnection::resolverFor($driver, $callback);\n }\n\n /**\n * Get the connection resolver for the given driver.\n *\n * @param string $driver\n * @return \\Closure|null\n * @static\n */\n public static function getResolver($driver)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n return \\Illuminate\\Database\\MariaDbConnection::getResolver($driver);\n }\n\n /**\n * @template TReturn of mixed\n * \n * Execute a Closure within a transaction.\n * @param (\\Closure(static): TReturn) $callback\n * @param int $attempts\n * @return TReturn\n * @throws \\Throwable\n * @static\n */\n public static function transaction($callback, $attempts = 1)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->transaction($callback, $attempts);\n }\n\n /**\n * Start a new database transaction.\n *\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function beginTransaction()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->beginTransaction();\n }\n\n /**\n * Commit the active database transaction.\n *\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function commit()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->commit();\n }\n\n /**\n * Rollback the active database transaction.\n *\n * @param int|null $toLevel\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function rollBack($toLevel = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->rollBack($toLevel);\n }\n\n /**\n * Get the number of active transactions.\n *\n * @return int\n * @static\n */\n public static function transactionLevel()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->transactionLevel();\n }\n\n /**\n * Execute the callback after a transaction commits.\n *\n * @param callable $callback\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function afterCommit($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->afterCommit($callback);\n }\n\n /**\n * Execute the callback after a transaction rolls back.\n *\n * @param callable $callback\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function afterRollBack($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->afterRollBack($callback);\n }\n\n }\n /**\n * @see \\Illuminate\\Events\\Dispatcher\n * @see \\Illuminate\\Support\\Testing\\Fakes\\EventFake\n */\n class Event {\n /**\n * Register an event listener with the dispatcher.\n *\n * @param \\Illuminate\\Events\\Queued\\Closure|callable|array|class-string|string $events\n * @param \\Illuminate\\Events\\Queued\\Closure|callable|array|class-string|null $listener\n * @return void\n * @static\n */\n public static function listen($events, $listener = null)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->listen($events, $listener);\n }\n\n /**\n * Determine if a given event has listeners.\n *\n * @param string $eventName\n * @return bool\n * @static\n */\n public static function hasListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->hasListeners($eventName);\n }\n\n /**\n * Determine if the given event has any wildcard listeners.\n *\n * @param string $eventName\n * @return bool\n * @static\n */\n public static function hasWildcardListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->hasWildcardListeners($eventName);\n }\n\n /**\n * Register an event and payload to be fired later.\n *\n * @param string $event\n * @param object|array $payload\n * @return void\n * @static\n */\n public static function push($event, $payload = [])\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->push($event, $payload);\n }\n\n /**\n * Flush a set of pushed events.\n *\n * @param string $event\n * @return void\n * @static\n */\n public static function flush($event)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->flush($event);\n }\n\n /**\n * Register an event subscriber with the dispatcher.\n *\n * @param object|string $subscriber\n * @return void\n * @static\n */\n public static function subscribe($subscriber)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->subscribe($subscriber);\n }\n\n /**\n * Fire an event until the first non-null response is returned.\n *\n * @param string|object $event\n * @param mixed $payload\n * @return mixed\n * @static\n */\n public static function until($event, $payload = [])\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->until($event, $payload);\n }\n\n /**\n * Fire an event and call the listeners.\n *\n * @param string|object $event\n * @param mixed $payload\n * @param bool $halt\n * @return array|null\n * @static\n */\n public static function dispatch($event, $payload = [], $halt = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->dispatch($event, $payload, $halt);\n }\n\n /**\n * Get all of the listeners for a given event name.\n *\n * @param string $eventName\n * @return array\n * @static\n */\n public static function getListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->getListeners($eventName);\n }\n\n /**\n * Register an event listener with the dispatcher.\n *\n * @param \\Closure|string|array $listener\n * @param bool $wildcard\n * @return \\Closure\n * @static\n */\n public static function makeListener($listener, $wildcard = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->makeListener($listener, $wildcard);\n }\n\n /**\n * Create a class based listener using the IoC container.\n *\n * @param string $listener\n * @param bool $wildcard\n * @return \\Closure\n * @static\n */\n public static function createClassListener($listener, $wildcard = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->createClassListener($listener, $wildcard);\n }\n\n /**\n * Remove a set of listeners from the dispatcher.\n *\n * @param string $event\n * @return void\n * @static\n */\n public static function forget($event)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->forget($event);\n }\n\n /**\n * Forget all of the pushed listeners.\n *\n * @return void\n * @static\n */\n public static function forgetPushed()\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->forgetPushed();\n }\n\n /**\n * Set the queue resolver implementation.\n *\n * @param callable $resolver\n * @return \\Illuminate\\Events\\Dispatcher\n * @static\n */\n public static function setQueueResolver($resolver)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->setQueueResolver($resolver);\n }\n\n /**\n * Set the database transaction manager resolver implementation.\n *\n * @param callable $resolver\n * @return \\Illuminate\\Events\\Dispatcher\n * @static\n */\n public static function setTransactionManagerResolver($resolver)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->setTransactionManagerResolver($resolver);\n }\n\n /**\n * Execute the given callback while deferring events, then dispatch all deferred events.\n *\n * @param callable $callback\n * @param array|null $events\n * @return mixed\n * @static\n */\n public static function defer($callback, $events = null)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->defer($callback, $events);\n }\n\n /**\n * Gets the raw, unprepared listeners.\n *\n * @return array\n * @static\n */\n public static function getRawListeners()\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->getRawListeners();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Events\\Dispatcher::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Events\\Dispatcher::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Events\\Dispatcher::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Events\\Dispatcher::flushMacros();\n }\n\n /**\n * Specify the events that should be dispatched instead of faked.\n *\n * @param array|string $eventsToDispatch\n * @return \\Illuminate\\Support\\Testing\\Fakes\\EventFake\n * @static\n */\n public static function except($eventsToDispatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->except($eventsToDispatch);\n }\n\n /**\n * Assert if an event has a listener attached to it.\n *\n * @param string $expectedEvent\n * @param string|array $expectedListener\n * @return void\n * @static\n */\n public static function assertListening($expectedEvent, $expectedListener)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertListening($expectedEvent, $expectedListener);\n }\n\n /**\n * Assert if an event was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $event\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatched($event, $callback);\n }\n\n /**\n * Assert if an event was dispatched exactly once.\n *\n * @param string $event\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedOnce($event)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatchedOnce($event);\n }\n\n /**\n * Assert if an event was dispatched a number of times.\n *\n * @param string $event\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedTimes($event, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatchedTimes($event, $times);\n }\n\n /**\n * Determine if an event was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $event\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertNotDispatched($event, $callback);\n }\n\n /**\n * Assert that no events were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingDispatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertNothingDispatched();\n }\n\n /**\n * Get all of the events matching a truth-test callback.\n *\n * @param string $event\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->dispatched($event, $callback);\n }\n\n /**\n * Determine if the given event has been dispatched.\n *\n * @param string $event\n * @return bool\n * @static\n */\n public static function hasDispatched($event)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->hasDispatched($event);\n }\n\n /**\n * Get the events that have been dispatched.\n *\n * @return array\n * @static\n */\n public static function dispatchedEvents()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->dispatchedEvents();\n }\n\n }\n /**\n * @see \\Illuminate\\Filesystem\\Filesystem\n */\n class File {\n /**\n * Determine if a file or directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function exists($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->exists($path);\n }\n\n /**\n * Determine if a file or directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function missing($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->missing($path);\n }\n\n /**\n * Get the contents of a file.\n *\n * @param string $path\n * @param bool $lock\n * @return string\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function get($path, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->get($path, $lock);\n }\n\n /**\n * Get the contents of a file as decoded JSON.\n *\n * @param string $path\n * @param int $flags\n * @param bool $lock\n * @return array\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function json($path, $flags = 0, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->json($path, $flags, $lock);\n }\n\n /**\n * Get contents of a file with shared access.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function sharedGet($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->sharedGet($path);\n }\n\n /**\n * Get the returned value of a file.\n *\n * @param string $path\n * @param array $data\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function getRequire($path, $data = [])\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->getRequire($path, $data);\n }\n\n /**\n * Require the given file once.\n *\n * @param string $path\n * @param array $data\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function requireOnce($path, $data = [])\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->requireOnce($path, $data);\n }\n\n /**\n * Get the contents of a file one line at a time.\n *\n * @param string $path\n * @return \\Illuminate\\Support\\LazyCollection\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function lines($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->lines($path);\n }\n\n /**\n * Get the hash of the file at the given path.\n *\n * @param string $path\n * @param string $algorithm\n * @return string|false\n * @static\n */\n public static function hash($path, $algorithm = 'md5')\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->hash($path, $algorithm);\n }\n\n /**\n * Write the contents of a file.\n *\n * @param string $path\n * @param string $contents\n * @param bool $lock\n * @return int|bool\n * @static\n */\n public static function put($path, $contents, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->put($path, $contents, $lock);\n }\n\n /**\n * Write the contents of a file, replacing it atomically if it already exists.\n *\n * @param string $path\n * @param string $content\n * @param int|null $mode\n * @return void\n * @static\n */\n public static function replace($path, $content, $mode = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->replace($path, $content, $mode);\n }\n\n /**\n * Replace a given string within a given file.\n *\n * @param array|string $search\n * @param array|string $replace\n * @param string $path\n * @return void\n * @static\n */\n public static function replaceInFile($search, $replace, $path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->replaceInFile($search, $replace, $path);\n }\n\n /**\n * Prepend to a file.\n *\n * @param string $path\n * @param string $data\n * @return int\n * @static\n */\n public static function prepend($path, $data)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->prepend($path, $data);\n }\n\n /**\n * Append to a file.\n *\n * @param string $path\n * @param string $data\n * @param bool $lock\n * @return int\n * @static\n */\n public static function append($path, $data, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->append($path, $data, $lock);\n }\n\n /**\n * Get or set UNIX mode of a file or directory.\n *\n * @param string $path\n * @param int|null $mode\n * @return mixed\n * @static\n */\n public static function chmod($path, $mode = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->chmod($path, $mode);\n }\n\n /**\n * Delete the file at a given path.\n *\n * @param string|array $paths\n * @return bool\n * @static\n */\n public static function delete($paths)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->delete($paths);\n }\n\n /**\n * Move a file to a new location.\n *\n * @param string $path\n * @param string $target\n * @return bool\n * @static\n */\n public static function move($path, $target)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->move($path, $target);\n }\n\n /**\n * Copy a file to a new location.\n *\n * @param string $path\n * @param string $target\n * @return bool\n * @static\n */\n public static function copy($path, $target)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->copy($path, $target);\n }\n\n /**\n * Create a symlink to the target file or directory. On Windows, a hard link is created if the target is a file.\n *\n * @param string $target\n * @param string $link\n * @return bool|null\n * @static\n */\n public static function link($target, $link)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->link($target, $link);\n }\n\n /**\n * Create a relative symlink to the target file or directory.\n *\n * @param string $target\n * @param string $link\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function relativeLink($target, $link)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->relativeLink($target, $link);\n }\n\n /**\n * Extract the file name from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function name($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->name($path);\n }\n\n /**\n * Extract the trailing name component from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function basename($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->basename($path);\n }\n\n /**\n * Extract the parent directory from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function dirname($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->dirname($path);\n }\n\n /**\n * Extract the file extension from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function extension($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->extension($path);\n }\n\n /**\n * Guess the file extension from the mime-type of a given file.\n *\n * @param string $path\n * @return string|null\n * @throws \\RuntimeException\n * @static\n */\n public static function guessExtension($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->guessExtension($path);\n }\n\n /**\n * Get the file type of a given file.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function type($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->type($path);\n }\n\n /**\n * Get the mime-type of a given file.\n *\n * @param string $path\n * @return string|false\n * @static\n */\n public static function mimeType($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->mimeType($path);\n }\n\n /**\n * Get the file size of a given file.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function size($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->size($path);\n }\n\n /**\n * Get the file's last modification time.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function lastModified($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->lastModified($path);\n }\n\n /**\n * Determine if the given path is a directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function isDirectory($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isDirectory($directory);\n }\n\n /**\n * Determine if the given path is a directory that does not contain any other files or directories.\n *\n * @param string $directory\n * @param bool $ignoreDotFiles\n * @return bool\n * @static\n */\n public static function isEmptyDirectory($directory, $ignoreDotFiles = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isEmptyDirectory($directory, $ignoreDotFiles);\n }\n\n /**\n * Determine if the given path is readable.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isReadable($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isReadable($path);\n }\n\n /**\n * Determine if the given path is writable.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isWritable($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isWritable($path);\n }\n\n /**\n * Determine if two files are the same by comparing their hashes.\n *\n * @param string $firstFile\n * @param string $secondFile\n * @return bool\n * @static\n */\n public static function hasSameHash($firstFile, $secondFile)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->hasSameHash($firstFile, $secondFile);\n }\n\n /**\n * Determine if the given path is a file.\n *\n * @param string $file\n * @return bool\n * @static\n */\n public static function isFile($file)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isFile($file);\n }\n\n /**\n * Find path names matching a given pattern.\n *\n * @param string $pattern\n * @param int $flags\n * @return array\n * @static\n */\n public static function glob($pattern, $flags = 0)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->glob($pattern, $flags);\n }\n\n /**\n * Get an array of all files in a directory.\n *\n * @param string $directory\n * @param bool $hidden\n * @return \\Symfony\\Component\\Finder\\SplFileInfo[]\n * @static\n */\n public static function files($directory, $hidden = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->files($directory, $hidden);\n }\n\n /**\n * Get all of the files from the given directory (recursive).\n *\n * @param string $directory\n * @param bool $hidden\n * @return \\Symfony\\Component\\Finder\\SplFileInfo[]\n * @static\n */\n public static function allFiles($directory, $hidden = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->allFiles($directory, $hidden);\n }\n\n /**\n * Get all of the directories within a given directory.\n *\n * @param string $directory\n * @return array\n * @static\n */\n public static function directories($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->directories($directory);\n }\n\n /**\n * Ensure a directory exists.\n *\n * @param string $path\n * @param int $mode\n * @param bool $recursive\n * @return void\n * @static\n */\n public static function ensureDirectoryExists($path, $mode = 493, $recursive = true)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->ensureDirectoryExists($path, $mode, $recursive);\n }\n\n /**\n * Create a directory.\n *\n * @param string $path\n * @param int $mode\n * @param bool $recursive\n * @param bool $force\n * @return bool\n * @static\n */\n public static function makeDirectory($path, $mode = 493, $recursive = false, $force = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->makeDirectory($path, $mode, $recursive, $force);\n }\n\n /**\n * Move a directory.\n *\n * @param string $from\n * @param string $to\n * @param bool $overwrite\n * @return bool\n * @static\n */\n public static function moveDirectory($from, $to, $overwrite = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->moveDirectory($from, $to, $overwrite);\n }\n\n /**\n * Copy a directory from one location to another.\n *\n * @param string $directory\n * @param string $destination\n * @param int|null $options\n * @return bool\n * @static\n */\n public static function copyDirectory($directory, $destination, $options = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->copyDirectory($directory, $destination, $options);\n }\n\n /**\n * Recursively delete a directory.\n * \n * The directory itself may be optionally preserved.\n *\n * @param string $directory\n * @param bool $preserve\n * @return bool\n * @static\n */\n public static function deleteDirectory($directory, $preserve = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->deleteDirectory($directory, $preserve);\n }\n\n /**\n * Remove all of the directories within a given directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function deleteDirectories($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->deleteDirectories($directory);\n }\n\n /**\n * Empty the specified directory of all files and folders.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function cleanDirectory($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->cleanDirectory($directory);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Filesystem\\Filesystem::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Filesystem\\Filesystem::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Filesystem\\Filesystem::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Filesystem\\Filesystem::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Auth\\Access\\Gate\n */\n class Gate {\n /**\n * Determine if a given ability has been defined.\n *\n * @param string|array $ability\n * @return bool\n * @static\n */\n public static function has($ability)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->has($ability);\n }\n\n /**\n * Perform an on-demand authorization check. Throw an authorization exception if the condition or callback is false.\n *\n * @param \\Illuminate\\Auth\\Access\\Response|\\Closure|bool $condition\n * @param string|null $message\n * @param string|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function allowIf($condition, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->allowIf($condition, $message, $code);\n }\n\n /**\n * Perform an on-demand authorization check. Throw an authorization exception if the condition or callback is true.\n *\n * @param \\Illuminate\\Auth\\Access\\Response|\\Closure|bool $condition\n * @param string|null $message\n * @param string|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function denyIf($condition, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyIf($condition, $message, $code);\n }\n\n /**\n * Define a new ability.\n *\n * @param \\UnitEnum|string $ability\n * @param callable|array|string $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function define($ability, $callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->define($ability, $callback);\n }\n\n /**\n * Define abilities for a resource.\n *\n * @param string $name\n * @param string $class\n * @param array|null $abilities\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function resource($name, $class, $abilities = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->resource($name, $class, $abilities);\n }\n\n /**\n * Define a policy class for a given class type.\n *\n * @param string $class\n * @param string $policy\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function policy($class, $policy)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->policy($class, $policy);\n }\n\n /**\n * Register a callback to run before all Gate checks.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function before($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->before($callback);\n }\n\n /**\n * Register a callback to run after all Gate checks.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function after($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->after($callback);\n }\n\n /**\n * Determine if all of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $ability\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function allows($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->allows($ability, $arguments);\n }\n\n /**\n * Determine if any of the given abilities should be denied for the current user.\n *\n * @param iterable|\\UnitEnum|string $ability\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function denies($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denies($ability, $arguments);\n }\n\n /**\n * Determine if all of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function check($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->check($abilities, $arguments);\n }\n\n /**\n * Determine if any one of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function any($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->any($abilities, $arguments);\n }\n\n /**\n * Determine if all of the given abilities should be denied for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function none($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->none($abilities, $arguments);\n }\n\n /**\n * Determine if the given ability should be granted for the current user.\n *\n * @param \\UnitEnum|string $ability\n * @param mixed $arguments\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function authorize($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->authorize($ability, $arguments);\n }\n\n /**\n * Inspect the user for the given ability.\n *\n * @param \\UnitEnum|string $ability\n * @param mixed $arguments\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function inspect($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->inspect($ability, $arguments);\n }\n\n /**\n * Get the raw result from the authorization callback.\n *\n * @param string $ability\n * @param mixed $arguments\n * @return mixed\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function raw($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->raw($ability, $arguments);\n }\n\n /**\n * Get a policy instance for a given class.\n *\n * @param object|string $class\n * @return mixed\n * @static\n */\n public static function getPolicyFor($class)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->getPolicyFor($class);\n }\n\n /**\n * Specify a callback to be used to guess policy names.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function guessPolicyNamesUsing($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->guessPolicyNamesUsing($callback);\n }\n\n /**\n * Build a policy class instance of the given type.\n *\n * @param object|string $class\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function resolvePolicy($class)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->resolvePolicy($class);\n }\n\n /**\n * Get a gate instance for the given user.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable|mixed $user\n * @return static\n * @static\n */\n public static function forUser($user)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->forUser($user);\n }\n\n /**\n * Get all of the defined abilities.\n *\n * @return array\n * @static\n */\n public static function abilities()\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->abilities();\n }\n\n /**\n * Get all of the defined policies.\n *\n * @return array\n * @static\n */\n public static function policies()\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->policies();\n }\n\n /**\n * Set the default denial response for gates and policies.\n *\n * @param \\Illuminate\\Auth\\Access\\Response $response\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function defaultDenialResponse($response)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->defaultDenialResponse($response);\n }\n\n /**\n * Set the container instance used by the gate.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Deny with a HTTP status code.\n *\n * @param int $status\n * @param string|null $message\n * @param int|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function denyWithStatus($status, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyWithStatus($status, $message, $code);\n }\n\n /**\n * Deny with a 404 HTTP status code.\n *\n * @param string|null $message\n * @param int|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function denyAsNotFound($message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyAsNotFound($message, $code);\n }\n\n }\n /**\n * @see \\Illuminate\\Hashing\\HashManager\n * @see \\Illuminate\\Hashing\\AbstractHasher\n */\n class Hash {\n /**\n * Create an instance of the Bcrypt hash Driver.\n *\n * @return \\Illuminate\\Hashing\\BcryptHasher\n * @static\n */\n public static function createBcryptDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createBcryptDriver();\n }\n\n /**\n * Create an instance of the Argon2i hash Driver.\n *\n * @return \\Illuminate\\Hashing\\ArgonHasher\n * @static\n */\n public static function createArgonDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createArgonDriver();\n }\n\n /**\n * Create an instance of the Argon2id hash Driver.\n *\n * @return \\Illuminate\\Hashing\\Argon2IdHasher\n * @static\n */\n public static function createArgon2idDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createArgon2idDriver();\n }\n\n /**\n * Get information about the given hashed value.\n *\n * @param string $hashedValue\n * @return array\n * @static\n */\n public static function info($hashedValue)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->info($hashedValue);\n }\n\n /**\n * Hash the given value.\n *\n * @param string $value\n * @param array $options\n * @return string\n * @static\n */\n public static function make($value, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->make($value, $options);\n }\n\n /**\n * Check the given plain value against a hash.\n *\n * @param string $value\n * @param string $hashedValue\n * @param array $options\n * @return bool\n * @static\n */\n public static function check($value, $hashedValue, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->check($value, $hashedValue, $options);\n }\n\n /**\n * Check if the given hash has been hashed using the given options.\n *\n * @param string $hashedValue\n * @param array $options\n * @return bool\n * @static\n */\n public static function needsRehash($hashedValue, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->needsRehash($hashedValue, $options);\n }\n\n /**\n * Determine if a given string is already hashed.\n *\n * @param string $value\n * @return bool\n * @static\n */\n public static function isHashed($value)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->isHashed($value);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Verifies that the configuration is less than or equal to what is configured.\n *\n * @param array $value\n * @return bool\n * @internal\n * @static\n */\n public static function verifyConfiguration($value)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->verifyConfiguration($value);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->forgetDrivers();\n }\n\n }\n /**\n * @method static \\Illuminate\\Http\\Client\\PendingRequest baseUrl(string $url)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withBody(\\Psr\\Http\\Message\\StreamInterface|string $content, string $contentType = 'application/json')\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asJson()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asForm()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest attach(string|array $name, string|resource $contents = '', string|null $filename = null, array $headers = [])\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asMultipart()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest bodyFormat(string $format)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withQueryParameters(array $parameters)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest contentType(string $contentType)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest acceptJson()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest accept(string $contentType)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withHeaders(array $headers)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withHeader(string $name, mixed $value)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest replaceHeaders(array $headers)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withBasicAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withDigestAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withNtlmAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withToken(string $token, string $type = 'Bearer')\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withUserAgent(string|bool $userAgent)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withUrlParameters(array $parameters = [])\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withCookies(array $cookies, string $domain)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest maxRedirects(int $max)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withoutRedirecting()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withoutVerifying()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest sink(string|resource $to)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest timeout(int|float $seconds)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest connectTimeout(int|float $seconds)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest retry(array|int $times, \\Closure|int $sleepMilliseconds = 0, callable|null $when = null, bool $throw = true)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withOptions(array $options)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withRequestMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withResponseMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest beforeSending(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throw(callable|null $callback = null)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throwIf(callable|bool $condition)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throwUnless(callable|bool $condition)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dump()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dd()\n * @method static \\Illuminate\\Http\\Client\\Response get(string $url, array|string|null $query = null)\n * @method static \\Illuminate\\Http\\Client\\Response head(string $url, array|string|null $query = null)\n * @method static \\Illuminate\\Http\\Client\\Response post(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response patch(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response put(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response delete(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static array pool(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\Batch batch(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\Response send(string $method, string $url, array $options = [])\n * @method static \\GuzzleHttp\\Client buildClient()\n * @method static \\GuzzleHttp\\Client createClient(\\GuzzleHttp\\HandlerStack $handlerStack)\n * @method static \\GuzzleHttp\\HandlerStack buildHandlerStack()\n * @method static \\GuzzleHttp\\HandlerStack pushHandlers(\\GuzzleHttp\\HandlerStack $handlerStack)\n * @method static \\Closure buildBeforeSendingHandler()\n * @method static \\Closure buildRecorderHandler()\n * @method static \\Closure buildStubHandler()\n * @method static \\GuzzleHttp\\Psr7\\RequestInterface runBeforeSendingCallbacks(\\GuzzleHttp\\Psr7\\RequestInterface $request, array $options)\n * @method static array mergeOptions(array ...$options)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest stub(callable $callback)\n * @method static bool isAllowedRequestUrl(string $url)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest async(bool $async = true)\n * @method static \\GuzzleHttp\\Promise\\PromiseInterface|null getPromise()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest truncateExceptionsAt(int $length)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dontTruncateExceptions()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest setClient(\\GuzzleHttp\\Client $client)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest setHandler(callable $handler)\n * @method static array getOptions()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Http\\Client\\Factory\n */\n class Http {\n /**\n * Add middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalMiddleware($middleware);\n }\n\n /**\n * Add request middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalRequestMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalRequestMiddleware($middleware);\n }\n\n /**\n * Add response middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalResponseMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalResponseMiddleware($middleware);\n }\n\n /**\n * Set the options to apply to every request.\n *\n * @param \\Closure|array $options\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalOptions($options)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalOptions($options);\n }\n\n /**\n * Create a new response instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array $headers\n * @return \\GuzzleHttp\\Promise\\PromiseInterface\n * @static\n */\n public static function response($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::response($body, $status, $headers);\n }\n\n /**\n * Create a new PSR-7 response instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array<string, mixed> $headers\n * @return \\GuzzleHttp\\Psr7\\Response\n * @static\n */\n public static function psr7Response($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::psr7Response($body, $status, $headers);\n }\n\n /**\n * Create a new RequestException instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array<string, mixed> $headers\n * @return \\Illuminate\\Http\\Client\\RequestException\n * @static\n */\n public static function failedRequest($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::failedRequest($body, $status, $headers);\n }\n\n /**\n * Create a new connection exception for use during stubbing.\n *\n * @param string|null $message\n * @return \\Closure(\\Illuminate\\Http\\Client\\Request): \\GuzzleHttp\\Promise\\PromiseInterface\n * @static\n */\n public static function failedConnection($message = null)\n {\n return \\Illuminate\\Http\\Client\\Factory::failedConnection($message);\n }\n\n /**\n * Get an invokable object that returns a sequence of responses in order for use during stubbing.\n *\n * @param array $responses\n * @return \\Illuminate\\Http\\Client\\ResponseSequence\n * @static\n */\n public static function sequence($responses = [])\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->sequence($responses);\n }\n\n /**\n * Register a stub callable that will intercept requests and be able to return stub responses.\n *\n * @param callable|array<string, mixed>|null $callback\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function fake($callback = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->fake($callback);\n }\n\n /**\n * Register a response sequence for the given URL pattern.\n *\n * @param string $url\n * @return \\Illuminate\\Http\\Client\\ResponseSequence\n * @static\n */\n public static function fakeSequence($url = '*')\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->fakeSequence($url);\n }\n\n /**\n * Stub the given URL using the given callback.\n *\n * @param string $url\n * @param \\Illuminate\\Http\\Client\\Response|\\GuzzleHttp\\Promise\\PromiseInterface|callable|int|string|array|\\Illuminate\\Http\\Client\\ResponseSequence $callback\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function stubUrl($url, $callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->stubUrl($url, $callback);\n }\n\n /**\n * Indicate that an exception should be thrown if any request is not faked.\n *\n * @param bool $prevent\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function preventStrayRequests($prevent = true)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->preventStrayRequests($prevent);\n }\n\n /**\n * Determine if stray requests are being prevented.\n *\n * @return bool\n * @static\n */\n public static function preventingStrayRequests()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->preventingStrayRequests();\n }\n\n /**\n * Allow stray, unfaked requests entirely, or optionally allow only specific URLs.\n *\n * @param array<int, string>|null $only\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function allowStrayRequests($only = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->allowStrayRequests($only);\n }\n\n /**\n * Begin recording request / response pairs.\n *\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function record()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->record();\n }\n\n /**\n * Record a request response pair.\n *\n * @param \\Illuminate\\Http\\Client\\Request $request\n * @param \\Illuminate\\Http\\Client\\Response|null $response\n * @return void\n * @static\n */\n public static function recordRequestResponsePair($request, $response)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->recordRequestResponsePair($request, $response);\n }\n\n /**\n * Assert that a request / response pair was recorded matching a given truth test.\n *\n * @param callable|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool) $callback\n * @return void\n * @static\n */\n public static function assertSent($callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSent($callback);\n }\n\n /**\n * Assert that the given request was sent in the given order.\n *\n * @param list<string|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool)|callable> $callbacks\n * @return void\n * @static\n */\n public static function assertSentInOrder($callbacks)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSentInOrder($callbacks);\n }\n\n /**\n * Assert that a request / response pair was not recorded matching a given truth test.\n *\n * @param callable|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool) $callback\n * @return void\n * @static\n */\n public static function assertNotSent($callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertNotSent($callback);\n }\n\n /**\n * Assert that no request / response pair was recorded.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert how many requests have been recorded.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertSentCount($count)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSentCount($count);\n }\n\n /**\n * Assert that every created response sequence is empty.\n *\n * @return void\n * @static\n */\n public static function assertSequencesAreEmpty()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSequencesAreEmpty();\n }\n\n /**\n * Get a collection of the request / response pairs matching the given truth test.\n *\n * @param (\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool)|callable $callback\n * @return \\Illuminate\\Support\\Collection<int, array{0: \\Illuminate\\Http\\Client\\Request, 1: \\Illuminate\\Http\\Client\\Response|null}>\n * @static\n */\n public static function recorded($callback = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->recorded($callback);\n }\n\n /**\n * Create a new pending request instance for this factory.\n *\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function createPendingRequest()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->createPendingRequest();\n }\n\n /**\n * Get the current event dispatcher implementation.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher|null\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Get the array of global middleware.\n *\n * @return array\n * @static\n */\n public static function getGlobalMiddleware()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->getGlobalMiddleware();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Http\\Client\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Http\\Client\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Http\\Client\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Http\\Client\\Factory::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatApi();\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatAnalyticsApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatAnalyticsApi();\n }\n\n }\n /**\n * @see \\Illuminate\\Translation\\Translator\n */\n class Lang {\n /**\n * Determine if a translation exists for a given locale.\n *\n * @param string $key\n * @param string|null $locale\n * @return bool\n * @static\n */\n public static function hasForLocale($key, $locale = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->hasForLocale($key, $locale);\n }\n\n /**\n * Determine if a translation exists.\n *\n * @param string $key\n * @param string|null $locale\n * @param bool $fallback\n * @return bool\n * @static\n */\n public static function has($key, $locale = null, $fallback = true)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->has($key, $locale, $fallback);\n }\n\n /**\n * Get the translation for the given key.\n *\n * @param string $key\n * @param array $replace\n * @param string|null $locale\n * @param bool $fallback\n * @return string|array\n * @static\n */\n public static function get($key, $replace = [], $locale = null, $fallback = true)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->get($key, $replace, $locale, $fallback);\n }\n\n /**\n * Get a translation according to an integer value.\n *\n * @param string $key\n * @param \\Countable|int|float|array $number\n * @param array $replace\n * @param string|null $locale\n * @return string\n * @static\n */\n public static function choice($key, $number, $replace = [], $locale = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->choice($key, $number, $replace, $locale);\n }\n\n /**\n * Add translation lines to the given locale.\n *\n * @param array $lines\n * @param string $locale\n * @param string $namespace\n * @return void\n * @static\n */\n public static function addLines($lines, $locale, $namespace = '*')\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addLines($lines, $locale, $namespace);\n }\n\n /**\n * Load the specified language group.\n *\n * @param string $namespace\n * @param string $group\n * @param string $locale\n * @return void\n * @static\n */\n public static function load($namespace, $group, $locale)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->load($namespace, $group, $locale);\n }\n\n /**\n * Register a callback that is responsible for handling missing translation keys.\n *\n * @param callable|null $callback\n * @return static\n * @static\n */\n public static function handleMissingKeysUsing($callback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->handleMissingKeysUsing($callback);\n }\n\n /**\n * Add a new namespace to the loader.\n *\n * @param string $namespace\n * @param string $hint\n * @return void\n * @static\n */\n public static function addNamespace($namespace, $hint)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addNamespace($namespace, $hint);\n }\n\n /**\n * Add a new path to the loader.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function addPath($path)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addPath($path);\n }\n\n /**\n * Add a new JSON path to the loader.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function addJsonPath($path)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addJsonPath($path);\n }\n\n /**\n * Parse a key into namespace, group, and item.\n *\n * @param string $key\n * @return array\n * @static\n */\n public static function parseKey($key)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->parseKey($key);\n }\n\n /**\n * Specify a callback that should be invoked to determined the applicable locale array.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function determineLocalesUsing($callback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->determineLocalesUsing($callback);\n }\n\n /**\n * Get the message selector instance.\n *\n * @return \\Illuminate\\Translation\\MessageSelector\n * @static\n */\n public static function getSelector()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getSelector();\n }\n\n /**\n * Set the message selector instance.\n *\n * @param \\Illuminate\\Translation\\MessageSelector $selector\n * @return void\n * @static\n */\n public static function setSelector($selector)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setSelector($selector);\n }\n\n /**\n * Get the language line loader implementation.\n *\n * @return \\Illuminate\\Contracts\\Translation\\Loader\n * @static\n */\n public static function getLoader()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getLoader();\n }\n\n /**\n * Get the default locale being used.\n *\n * @return string\n * @static\n */\n public static function locale()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->locale();\n }\n\n /**\n * Get the default locale being used.\n *\n * @return string\n * @static\n */\n public static function getLocale()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getLocale();\n }\n\n /**\n * Set the default locale.\n *\n * @param string $locale\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function setLocale($locale)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setLocale($locale);\n }\n\n /**\n * Get the fallback locale being used.\n *\n * @return string\n * @static\n */\n public static function getFallback()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getFallback();\n }\n\n /**\n * Set the fallback locale being used.\n *\n * @param string $fallback\n * @return void\n * @static\n */\n public static function setFallback($fallback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setFallback($fallback);\n }\n\n /**\n * Set the loaded translation groups.\n *\n * @param array $loaded\n * @return void\n * @static\n */\n public static function setLoaded($loaded)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setLoaded($loaded);\n }\n\n /**\n * Add a handler to be executed in order to format a given class to a string during translation replacements.\n *\n * @param callable|string $class\n * @param callable|null $handler\n * @return void\n * @static\n */\n public static function stringable($class, $handler = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->stringable($class, $handler);\n }\n\n /**\n * Set the parsed value of a key.\n *\n * @param string $key\n * @param array $parsed\n * @return void\n * @static\n */\n public static function setParsedKey($key, $parsed)\n {\n //Method inherited from \\Illuminate\\Support\\NamespacedItemResolver \n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setParsedKey($key, $parsed);\n }\n\n /**\n * Flush the cache of parsed keys.\n *\n * @return void\n * @static\n */\n public static function flushParsedKeys()\n {\n //Method inherited from \\Illuminate\\Support\\NamespacedItemResolver \n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->flushParsedKeys();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Translation\\Translator::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Translation\\Translator::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Translation\\Translator::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Translation\\Translator::flushMacros();\n }\n\n }\n /**\n * @method static void write(string $level, \\Illuminate\\Contracts\\Support\\Arrayable|\\Illuminate\\Contracts\\Support\\Jsonable|\\Illuminate\\Support\\Stringable|array|string $message, array $context = [])\n * @method static \\Illuminate\\Log\\Logger withContext(array $context = [])\n * @method static void listen(\\Closure $callback)\n * @method static \\Psr\\Log\\LoggerInterface getLogger()\n * @method static \\Illuminate\\Contracts\\Events\\Dispatcher getEventDispatcher()\n * @method static void setEventDispatcher(\\Illuminate\\Contracts\\Events\\Dispatcher $dispatcher)\n * @method static \\Illuminate\\Log\\Logger|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Log\\Logger|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Log\\LogManager\n */\n class Log {\n /**\n * Build an on-demand log channel.\n *\n * @param array $config\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new, on-demand aggregate logger instance.\n *\n * @param array $channels\n * @param string|null $channel\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function stack($channels, $channel = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->stack($channels, $channel);\n }\n\n /**\n * Get a log channel instance.\n *\n * @param string|null $channel\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function channel($channel = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->channel($channel);\n }\n\n /**\n * Get a log driver instance.\n *\n * @param string|null $driver\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Share context across channels and stacks.\n *\n * @param array $context\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function shareContext($context)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->shareContext($context);\n }\n\n /**\n * The context shared across channels and stacks.\n *\n * @return array\n * @static\n */\n public static function sharedContext()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->sharedContext();\n }\n\n /**\n * Flush the log context on all currently resolved channels.\n *\n * @param string[]|null $keys\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function withoutContext($keys = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->withoutContext($keys);\n }\n\n /**\n * Flush the shared context.\n *\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function flushSharedContext()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->flushSharedContext();\n }\n\n /**\n * Get the default log driver name.\n *\n * @return string|null\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default log driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Unset the given channel instance.\n *\n * @param string|null $driver\n * @return void\n * @static\n */\n public static function forgetChannel($driver = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->forgetChannel($driver);\n }\n\n /**\n * Get all of the resolved log channels.\n *\n * @return array\n * @static\n */\n public static function getChannels()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->getChannels();\n }\n\n /**\n * System is unusable.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function emergency($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->emergency($message, $context);\n }\n\n /**\n * Action must be taken immediately.\n * \n * Example: Entire website down, database unavailable, etc. This should\n * trigger the SMS alerts and wake you up.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function alert($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->alert($message, $context);\n }\n\n /**\n * Critical conditions.\n * \n * Example: Application component unavailable, unexpected exception.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function critical($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->critical($message, $context);\n }\n\n /**\n * Runtime errors that do not require immediate action but should typically\n * be logged and monitored.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function error($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->error($message, $context);\n }\n\n /**\n * Exceptional occurrences that are not errors.\n * \n * Example: Use of deprecated APIs, poor use of an API, undesirable things\n * that are not necessarily wrong.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function warning($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->warning($message, $context);\n }\n\n /**\n * Normal but significant events.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function notice($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->notice($message, $context);\n }\n\n /**\n * Interesting events.\n * \n * Example: User logs in, SQL logs.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function info($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->info($message, $context);\n }\n\n /**\n * Detailed debug information.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function debug($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->debug($message, $context);\n }\n\n /**\n * Logs with an arbitrary level.\n *\n * @param mixed $level\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function log($level, $message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->log($level, $message, $context);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->setApplication($app);\n }\n\n }\n /**\n * @method static void alwaysFrom(string $address, string|null $name = null)\n * @method static void alwaysReplyTo(string $address, string|null $name = null)\n * @method static void alwaysReturnPath(string $address)\n * @method static void alwaysTo(string $address, string|null $name = null)\n * @method static \\Illuminate\\Mail\\SentMessage|null html(string $html, mixed $callback)\n * @method static \\Illuminate\\Mail\\SentMessage|null plain(string $view, array $data, mixed $callback)\n * @method static string render(string|array $view, array $data = [])\n * @method static mixed onQueue(\\BackedEnum|string|null $queue, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static mixed queueOn(string $queue, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static mixed laterOn(string $queue, \\DateTimeInterface|\\DateInterval|int $delay, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static \\Symfony\\Component\\Mailer\\Transport\\TransportInterface getSymfonyTransport()\n * @method static \\Illuminate\\Contracts\\View\\Factory getViewFactory()\n * @method static void setSymfonyTransport(\\Symfony\\Component\\Mailer\\Transport\\TransportInterface $transport)\n * @method static \\Illuminate\\Mail\\Mailer setQueue(\\Illuminate\\Contracts\\Queue\\Factory $queue)\n * @method static void macro(string $name, object|callable $macro)\n * @method static void mixin(object $mixin, bool $replace = true)\n * @method static bool hasMacro(string $name)\n * @method static void flushMacros()\n * @see \\Illuminate\\Mail\\MailManager\n * @see \\Illuminate\\Support\\Testing\\Fakes\\MailFake\n */\n class Mail {\n /**\n * Get a mailer instance by name.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Mail\\Mailer\n * @static\n */\n public static function mailer($name = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->mailer($name);\n }\n\n /**\n * Get a mailer driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Mail\\Mailer\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Build a new mailer instance.\n *\n * @param array $config\n * @return \\Illuminate\\Mail\\Mailer\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new transport instance.\n *\n * @param array $config\n * @return \\Symfony\\Component\\Mailer\\Transport\\TransportInterface\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function createSymfonyTransport($config)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->createSymfonyTransport($config);\n }\n\n /**\n * Get the default mail driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default mail driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Disconnect the given mailer and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom transport creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Forget all of the resolved mailer instances.\n *\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function forgetMailers()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->forgetMailers();\n }\n\n /**\n * Assert if a mailable was sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|int|null $callback\n * @return void\n * @static\n */\n public static function assertSent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertSent($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not sent or queued to be sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotOutgoing($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotOutgoing($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|null $callback\n * @return void\n * @static\n */\n public static function assertNotSent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotSent($mailable, $callback);\n }\n\n /**\n * Assert that no mailables were sent or queued to be sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingOutgoing()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingOutgoing();\n }\n\n /**\n * Assert that no mailables were sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert if a mailable was queued based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|int|null $callback\n * @return void\n * @static\n */\n public static function assertQueued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertQueued($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not queued based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|null $callback\n * @return void\n * @static\n */\n public static function assertNotQueued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotQueued($mailable, $callback);\n }\n\n /**\n * Assert that no mailables were queued.\n *\n * @return void\n * @static\n */\n public static function assertNothingQueued()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingQueued();\n }\n\n /**\n * Assert the total number of mailables that were sent.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertSentCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertSentCount($count);\n }\n\n /**\n * Assert the total number of mailables that were queued.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertQueuedCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertQueuedCount($count);\n }\n\n /**\n * Assert the total number of mailables that were sent or queued.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertOutgoingCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertOutgoingCount($count);\n }\n\n /**\n * Get all of the mailables matching a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function sent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->sent($mailable, $callback);\n }\n\n /**\n * Determine if the given mailable has been sent.\n *\n * @param string $mailable\n * @return bool\n * @static\n */\n public static function hasSent($mailable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->hasSent($mailable);\n }\n\n /**\n * Get all of the queued mailables matching a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function queued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->queued($mailable, $callback);\n }\n\n /**\n * Determine if the given mailable has been queued.\n *\n * @param string $mailable\n * @return bool\n * @static\n */\n public static function hasQueued($mailable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->hasQueued($mailable);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function to($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->to($users);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function cc($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->cc($users);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function bcc($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->bcc($users);\n }\n\n /**\n * Send a new message with only a raw text part.\n *\n * @param string $text\n * @param \\Closure|string $callback\n * @return void\n * @static\n */\n public static function raw($text, $callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->raw($text, $callback);\n }\n\n /**\n * Send a new message using a view.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param array $data\n * @param \\Closure|string|null $callback\n * @return mixed|void\n * @static\n */\n public static function send($view, $data = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->send($view, $data, $callback);\n }\n\n /**\n * Send a new message synchronously using a view.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $mailable\n * @param array $data\n * @param \\Closure|string|null $callback\n * @return void\n * @static\n */\n public static function sendNow($mailable, $data = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->sendNow($mailable, $data, $callback);\n }\n\n /**\n * Queue a new message for sending.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function queue($view, $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->queue($view, $queue);\n }\n\n /**\n * Queue a new e-mail message for sending after (n) seconds.\n *\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function later($delay, $view, $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->later($delay, $view, $queue);\n }\n\n }\n /**\n * @see \\Illuminate\\Notifications\\ChannelManager\n * @see \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake\n */\n class Notification {\n /**\n * Send the given notification to the given notifiable entities.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $notifiables\n * @param mixed $notification\n * @return void\n * @static\n */\n public static function send($notifiables, $notification)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->send($notifiables, $notification);\n }\n\n /**\n * Send the given notification immediately.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $notifiables\n * @param mixed $notification\n * @param array|null $channels\n * @return void\n * @static\n */\n public static function sendNow($notifiables, $notification, $channels = null)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->sendNow($notifiables, $notification, $channels);\n }\n\n /**\n * Get a channel instance.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function channel($name = null)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->channel($name);\n }\n\n /**\n * Get the default channel driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Get the default channel driver name.\n *\n * @return string\n * @static\n */\n public static function deliversVia()\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->deliversVia();\n }\n\n /**\n * Set the default channel driver name.\n *\n * @param string $channel\n * @return void\n * @static\n */\n public static function deliverVia($channel)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->deliverVia($channel);\n }\n\n /**\n * Set the locale of notifications.\n *\n * @param string $locale\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function locale($locale)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->locale($locale);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->forgetDrivers();\n }\n\n /**\n * Assert if a notification was sent on-demand based on a truth-test callback.\n *\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertSentOnDemand($notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentOnDemand($notification, $callback);\n }\n\n /**\n * Assert if a notification was sent based on a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertSentTo($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentTo($notifiable, $notification, $callback);\n }\n\n /**\n * Assert if a notification was sent on-demand a number of times.\n *\n * @param string $notification\n * @param int $times\n * @return void\n * @static\n */\n public static function assertSentOnDemandTimes($notification, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentOnDemandTimes($notification, $times);\n }\n\n /**\n * Assert if a notification was sent a number of times.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @param int $times\n * @return void\n * @static\n */\n public static function assertSentToTimes($notifiable, $notification, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentToTimes($notifiable, $notification, $times);\n }\n\n /**\n * Determine if a notification was sent based on a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertNotSentTo($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNotSentTo($notifiable, $notification, $callback);\n }\n\n /**\n * Assert that no notifications were sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert that no notifications were sent to the given notifiable.\n *\n * @param mixed $notifiable\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertNothingSentTo($notifiable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNothingSentTo($notifiable);\n }\n\n /**\n * Assert the total amount of times a notification was sent.\n *\n * @param string $notification\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertSentTimes($notification, $expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentTimes($notification, $expectedCount);\n }\n\n /**\n * Assert the total count of notification that were sent.\n *\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertCount($expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertCount($expectedCount);\n }\n\n /**\n * Get all of the notifications matching a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function sent($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->sent($notifiable, $notification, $callback);\n }\n\n /**\n * Determine if there are more notifications left to inspect.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @return bool\n * @static\n */\n public static function hasSent($notifiable, $notification)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->hasSent($notifiable, $notification);\n }\n\n /**\n * Specify if notification should be serialized and restored when being \"pushed\" to the queue.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the notifications that have been sent.\n *\n * @return array\n * @static\n */\n public static function sentNotifications()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->sentNotifications();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::flushMacros();\n }\n\n }\n /**\n * @method static string sendResetLink(array $credentials, \\Closure|null $callback = null)\n * @method static mixed reset(array $credentials, \\Closure $callback)\n * @method static \\Illuminate\\Contracts\\Auth\\CanResetPassword|null getUser(array $credentials)\n * @method static string createToken(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user)\n * @method static void deleteToken(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user)\n * @method static bool tokenExists(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user, string $token)\n * @method static \\Illuminate\\Auth\\Passwords\\TokenRepositoryInterface getRepository()\n * @method static \\Illuminate\\Support\\Timebox getTimebox()\n * @see \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager\n * @see \\Illuminate\\Auth\\Passwords\\PasswordBroker\n */\n class Password {\n /**\n * Attempt to get the broker from the local cache.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Auth\\PasswordBroker\n * @static\n */\n public static function broker($name = null)\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n return $instance->broker($name);\n }\n\n /**\n * Get the default password broker name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default password broker name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n }\n /**\n * @method static \\Illuminate\\Process\\PendingProcess command(array|string $command)\n * @method static \\Illuminate\\Process\\PendingProcess path(string $path)\n * @method static \\Illuminate\\Process\\PendingProcess timeout(int $timeout)\n * @method static \\Illuminate\\Process\\PendingProcess idleTimeout(int $timeout)\n * @method static \\Illuminate\\Process\\PendingProcess forever()\n * @method static \\Illuminate\\Process\\PendingProcess env(array $environment)\n * @method static \\Illuminate\\Process\\PendingProcess input(\\Traversable|resource|string|int|float|bool|null $input)\n * @method static \\Illuminate\\Process\\PendingProcess quietly()\n * @method static \\Illuminate\\Process\\PendingProcess tty(bool $tty = true)\n * @method static \\Illuminate\\Process\\PendingProcess options(array $options)\n * @method static \\Illuminate\\Contracts\\Process\\ProcessResult run(array|string|null $command = null, callable|null $output = null)\n * @method static \\Illuminate\\Process\\InvokedProcess start(array|string|null $command = null, callable|null $output = null)\n * @method static bool supportsTty()\n * @method static \\Illuminate\\Process\\PendingProcess withFakeHandlers(array $fakeHandlers)\n * @method static \\Illuminate\\Process\\PendingProcess|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Process\\PendingProcess|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Process\\PendingProcess\n * @see \\Illuminate\\Process\\Factory\n */\n class Process {\n /**\n * Create a new fake process response for testing purposes.\n *\n * @param array|string $output\n * @param array|string $errorOutput\n * @param int $exitCode\n * @return \\Illuminate\\Process\\FakeProcessResult\n * @static\n */\n public static function result($output = '', $errorOutput = '', $exitCode = 0)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->result($output, $errorOutput, $exitCode);\n }\n\n /**\n * Begin describing a fake process lifecycle.\n *\n * @return \\Illuminate\\Process\\FakeProcessDescription\n * @static\n */\n public static function describe()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->describe();\n }\n\n /**\n * Begin describing a fake process sequence.\n *\n * @param array $processes\n * @return \\Illuminate\\Process\\FakeProcessSequence\n * @static\n */\n public static function sequence($processes = [])\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->sequence($processes);\n }\n\n /**\n * Indicate that the process factory should fake processes.\n *\n * @param \\Closure|array|null $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function fake($callback = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->fake($callback);\n }\n\n /**\n * Determine if the process factory has fake process handlers and is recording processes.\n *\n * @return bool\n * @static\n */\n public static function isRecording()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->isRecording();\n }\n\n /**\n * Record the given process if processes should be recorded.\n *\n * @param \\Illuminate\\Process\\PendingProcess $process\n * @param \\Illuminate\\Contracts\\Process\\ProcessResult $result\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function recordIfRecording($process, $result)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->recordIfRecording($process, $result);\n }\n\n /**\n * Record the given process.\n *\n * @param \\Illuminate\\Process\\PendingProcess $process\n * @param \\Illuminate\\Contracts\\Process\\ProcessResult $result\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function record($process, $result)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->record($process, $result);\n }\n\n /**\n * Indicate that an exception should be thrown if any process is not faked.\n *\n * @param bool $prevent\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function preventStrayProcesses($prevent = true)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->preventStrayProcesses($prevent);\n }\n\n /**\n * Determine if stray processes are being prevented.\n *\n * @return bool\n * @static\n */\n public static function preventingStrayProcesses()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->preventingStrayProcesses();\n }\n\n /**\n * Assert that a process was recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertRan($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertRan($callback);\n }\n\n /**\n * Assert that a process was recorded a given number of times matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @param int $times\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertRanTimes($callback, $times = 1)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertRanTimes($callback, $times);\n }\n\n /**\n * Assert that a process was not recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertNotRan($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertNotRan($callback);\n }\n\n /**\n * Assert that a process was not recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertDidntRun($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertDidntRun($callback);\n }\n\n /**\n * Assert that no processes were recorded.\n *\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertNothingRan()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertNothingRan();\n }\n\n /**\n * Start defining a pool of processes.\n *\n * @param callable $callback\n * @return \\Illuminate\\Process\\Pool\n * @static\n */\n public static function pool($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->pool($callback);\n }\n\n /**\n * Start defining a series of piped processes.\n *\n * @param callable|array $callback\n * @return \\Illuminate\\Contracts\\Process\\ProcessResult\n * @static\n */\n public static function pipe($callback, $output = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->pipe($callback, $output);\n }\n\n /**\n * Run a pool of processes and wait for them to finish executing.\n *\n * @param callable $callback\n * @param callable|null $output\n * @return \\Illuminate\\Process\\ProcessPoolResults\n * @static\n */\n public static function concurrently($callback, $output = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->concurrently($callback, $output);\n }\n\n /**\n * Create a new pending process associated with this factory.\n *\n * @return \\Illuminate\\Process\\PendingProcess\n * @static\n */\n public static function newPendingProcess()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->newPendingProcess();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Process\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Process\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Process\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Process\\Factory::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Queue\\QueueManager\n * @see \\Illuminate\\Queue\\Queue\n * @see \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n */\n class Queue {\n /**\n * Register an event listener for the before job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function before($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->before($callback);\n }\n\n /**\n * Register an event listener for the after job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function after($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->after($callback);\n }\n\n /**\n * Register an event listener for the exception occurred job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function exceptionOccurred($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->exceptionOccurred($callback);\n }\n\n /**\n * Register an event listener for the daemon queue loop.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function looping($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->looping($callback);\n }\n\n /**\n * Register an event listener for the failed job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function failing($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->failing($callback);\n }\n\n /**\n * Register an event listener for the daemon queue starting.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function starting($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->starting($callback);\n }\n\n /**\n * Register an event listener for the daemon queue stopping.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function stopping($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->stopping($callback);\n }\n\n /**\n * Determine if the driver is connected.\n *\n * @param string|null $name\n * @return bool\n * @static\n */\n public static function connected($name = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->connected($name);\n }\n\n /**\n * Resolve a queue connection instance.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Queue\\Queue\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Add a queue connection resolver.\n *\n * @param string $driver\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function extend($driver, $resolver)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->extend($driver, $resolver);\n }\n\n /**\n * Add a queue connection resolver.\n *\n * @param string $driver\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function addConnector($driver, $resolver)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->addConnector($driver, $resolver);\n }\n\n /**\n * Get the name of the default queue connection.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the name of the default queue connection.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Get the full name for the given connection.\n *\n * @param string|null $connection\n * @return string\n * @static\n */\n public static function getName($connection = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getName($connection);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Queue\\QueueManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Specify the jobs that should be queued instead of faked.\n *\n * @param array|string $jobsToBeQueued\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function except($jobsToBeQueued)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->except($jobsToBeQueued);\n }\n\n /**\n * Assert if a job was pushed based on a truth-test callback.\n *\n * @param string|\\Closure $job\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertPushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushed($job, $callback);\n }\n\n /**\n * Assert if a job was pushed based on a truth-test callback.\n *\n * @param string $queue\n * @param string|\\Closure $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedOn($queue, $job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedOn($queue, $job, $callback);\n }\n\n /**\n * Assert if a job was pushed with chained jobs based on a truth-test callback.\n *\n * @param string $job\n * @param array $expectedChain\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedWithChain($job, $expectedChain = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedWithChain($job, $expectedChain, $callback);\n }\n\n /**\n * Assert if a job was pushed with an empty chain based on a truth-test callback.\n *\n * @param string $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedWithoutChain($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedWithoutChain($job, $callback);\n }\n\n /**\n * Assert if a closure was pushed based on a truth-test callback.\n *\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertClosurePushed($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertClosurePushed($callback);\n }\n\n /**\n * Assert that a closure was not pushed based on a truth-test callback.\n *\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertClosureNotPushed($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertClosureNotPushed($callback);\n }\n\n /**\n * Determine if a job was pushed based on a truth-test callback.\n *\n * @param string|\\Closure $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotPushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertNotPushed($job, $callback);\n }\n\n /**\n * Assert the total count of jobs that were pushed.\n *\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertCount($expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertCount($expectedCount);\n }\n\n /**\n * Assert that no jobs were pushed.\n *\n * @return void\n * @static\n */\n public static function assertNothingPushed()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertNothingPushed();\n }\n\n /**\n * Get all of the jobs matching a truth-test callback.\n *\n * @param string $job\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function pushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushed($job, $callback);\n }\n\n /**\n * Get all of the raw pushes matching a truth-test callback.\n *\n * @param null|\\Closure(string, ?string, array): bool $callback\n * @return \\Illuminate\\Support\\Collection<int, RawPushType>\n * @static\n */\n public static function pushedRaw($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushedRaw($callback);\n }\n\n /**\n * Get all of the jobs by listener class, passing an optional truth-test callback.\n *\n * @param class-string $listenerClass\n * @param (\\Closure(mixed, \\Illuminate\\Events\\CallQueuedListener, string|null, mixed): bool)|null $callback\n * @return \\Illuminate\\Support\\Collection<int, \\Illuminate\\Events\\CallQueuedListener>\n * @static\n */\n public static function listenersPushed($listenerClass, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->listenersPushed($listenerClass, $callback);\n }\n\n /**\n * Determine if there are any stored jobs for a given class.\n *\n * @param string $job\n * @return bool\n * @static\n */\n public static function hasPushed($job)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->hasPushed($job);\n }\n\n /**\n * Get the size of the queue.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function size($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->size($queue);\n }\n\n /**\n * Get the number of pending jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function pendingSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pendingSize($queue);\n }\n\n /**\n * Get the number of delayed jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function delayedSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->delayedSize($queue);\n }\n\n /**\n * Get the number of reserved jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function reservedSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->reservedSize($queue);\n }\n\n /**\n * Get the creation timestamp of the oldest pending job, excluding delayed jobs.\n *\n * @param string|null $queue\n * @return int|null\n * @static\n */\n public static function creationTimeOfOldestPendingJob($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->creationTimeOfOldestPendingJob($queue);\n }\n\n /**\n * Push a new job onto the queue.\n *\n * @param string|object $job\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function push($job, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->push($job, $data, $queue);\n }\n\n /**\n * Determine if a job should be faked or actually dispatched.\n *\n * @param object $job\n * @return bool\n * @static\n */\n public static function shouldFakeJob($job)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->shouldFakeJob($job);\n }\n\n /**\n * Push a raw payload onto the queue.\n *\n * @param string $payload\n * @param string|null $queue\n * @param array $options\n * @return mixed\n * @static\n */\n public static function pushRaw($payload, $queue = null, $options = [])\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushRaw($payload, $queue, $options);\n }\n\n /**\n * Push a new job onto the queue after (n) seconds.\n *\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param string|object $job\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function later($delay, $job, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->later($delay, $job, $data, $queue);\n }\n\n /**\n * Push a new job onto the queue.\n *\n * @param string $queue\n * @param string|object $job\n * @param mixed $data\n * @return mixed\n * @static\n */\n public static function pushOn($queue, $job, $data = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushOn($queue, $job, $data);\n }\n\n /**\n * Push a new job onto a specific queue after (n) seconds.\n *\n * @param string $queue\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param string|object $job\n * @param mixed $data\n * @return mixed\n * @static\n */\n public static function laterOn($queue, $delay, $job, $data = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->laterOn($queue, $delay, $job, $data);\n }\n\n /**\n * Pop the next job off of the queue.\n *\n * @param string|null $queue\n * @return \\Illuminate\\Contracts\\Queue\\Job|null\n * @static\n */\n public static function pop($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pop($queue);\n }\n\n /**\n * Push an array of jobs onto the queue.\n *\n * @param array $jobs\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function bulk($jobs, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->bulk($jobs, $data, $queue);\n }\n\n /**\n * Get the jobs that have been pushed.\n *\n * @return array\n * @static\n */\n public static function pushedJobs()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushedJobs();\n }\n\n /**\n * Get the payloads that were pushed raw.\n *\n * @return list<RawPushType>\n * @static\n */\n public static function rawPushes()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->rawPushes();\n }\n\n /**\n * Specify if jobs should be serialized and restored when being \"pushed\" to the queue.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the connection name for the queue.\n *\n * @return string\n * @static\n */\n public static function getConnectionName()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->getConnectionName();\n }\n\n /**\n * Set the connection name for the queue.\n *\n * @param string $name\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function setConnectionName($name)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->setConnectionName($name);\n }\n\n /**\n * Migrate the delayed jobs that are ready to the regular queue.\n *\n * @param string $from\n * @param string $to\n * @return array\n * @static\n */\n public static function migrateExpiredJobs($from, $to)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->migrateExpiredJobs($from, $to);\n }\n\n /**\n * Delete a reserved job from the queue.\n *\n * @param string $queue\n * @param \\Illuminate\\Queue\\Jobs\\RedisJob $job\n * @return void\n * @static\n */\n public static function deleteReserved($queue, $job)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->deleteReserved($queue, $job);\n }\n\n /**\n * Delete a reserved job from the reserved queue and release it.\n *\n * @param string $queue\n * @param \\Illuminate\\Queue\\Jobs\\RedisJob $job\n * @param int $delay\n * @return void\n * @static\n */\n public static function deleteAndRelease($queue, $job, $delay)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->deleteAndRelease($queue, $job, $delay);\n }\n\n /**\n * Delete all of the jobs from the queue.\n *\n * @param string $queue\n * @return int\n * @static\n */\n public static function clear($queue)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->clear($queue);\n }\n\n /**\n * Get the queue or return the default.\n *\n * @param string|null $queue\n * @return string\n * @static\n */\n public static function getQueue($queue)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getQueue($queue);\n }\n\n /**\n * Get the connection for the queue.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function getConnection()\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getConnection();\n }\n\n /**\n * Get the underlying Redis instance.\n *\n * @return \\Illuminate\\Contracts\\Redis\\Factory\n * @static\n */\n public static function getRedis()\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getRedis();\n }\n\n /**\n * Get the maximum number of attempts for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobTries($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobTries($job);\n }\n\n /**\n * Get the backoff for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobBackoff($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobBackoff($job);\n }\n\n /**\n * Get the expiration timestamp for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobExpiration($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobExpiration($job);\n }\n\n /**\n * Register a callback to be executed when creating job payloads.\n *\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function createPayloadUsing($callback)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n \\Illuminate\\Queue\\RedisQueue::createPayloadUsing($callback);\n }\n\n /**\n * Get the container instance being used by the connection.\n *\n * @return \\Illuminate\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the IoC container instance.\n *\n * @param \\Illuminate\\Container\\Container $container\n * @return void\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->setContainer($container);\n }\n\n }\n /**\n * @see \\Illuminate\\Cache\\RateLimiter\n */\n class RateLimiter {\n /**\n * Register a named limiter configuration.\n *\n * @param \\BackedEnum|\\UnitEnum|string $name\n * @param \\Closure $callback\n * @return \\Illuminate\\Cache\\RateLimiter\n * @static\n */\n public static function for($name, $callback)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->for($name, $callback);\n }\n\n /**\n * Get the given named rate limiter.\n *\n * @param \\BackedEnum|\\UnitEnum|string $name\n * @return \\Closure|null\n * @static\n */\n public static function limiter($name)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->limiter($name);\n }\n\n /**\n * Attempts to execute a callback if it's not limited.\n *\n * @param string $key\n * @param int $maxAttempts\n * @param \\Closure $callback\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @return mixed\n * @static\n */\n public static function attempt($key, $maxAttempts, $callback, $decaySeconds = 60)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->attempt($key, $maxAttempts, $callback, $decaySeconds);\n }\n\n /**\n * Determine if the given key has been \"accessed\" too many times.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return bool\n * @static\n */\n public static function tooManyAttempts($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->tooManyAttempts($key, $maxAttempts);\n }\n\n /**\n * Increment (by 1) the counter for a given key for a given decay time.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @return int\n * @static\n */\n public static function hit($key, $decaySeconds = 60)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->hit($key, $decaySeconds);\n }\n\n /**\n * Increment the counter for a given key for a given decay time by a given amount.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @param int $amount\n * @return int\n * @static\n */\n public static function increment($key, $decaySeconds = 60, $amount = 1)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->increment($key, $decaySeconds, $amount);\n }\n\n /**\n * Decrement the counter for a given key for a given decay time by a given amount.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @param int $amount\n * @return int\n * @static\n */\n public static function decrement($key, $decaySeconds = 60, $amount = 1)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->decrement($key, $decaySeconds, $amount);\n }\n\n /**\n * Get the number of attempts for the given key.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function attempts($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->attempts($key);\n }\n\n /**\n * Reset the number of attempts for the given key.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function resetAttempts($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->resetAttempts($key);\n }\n\n /**\n * Get the number of retries left for the given key.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return int\n * @static\n */\n public static function remaining($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->remaining($key, $maxAttempts);\n }\n\n /**\n * Get the number of retries left for the given key.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return int\n * @static\n */\n public static function retriesLeft($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->retriesLeft($key, $maxAttempts);\n }\n\n /**\n * Clear the hits and lockout timer for the given key.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function clear($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n $instance->clear($key);\n }\n\n /**\n * Get the number of seconds until the \"key\" is accessible again.\n *\n * @param string $key\n * @return int\n * @static\n */\n public static function availableIn($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->availableIn($key);\n }\n\n /**\n * Clean the rate limiter key from unicode characters.\n *\n * @param string $key\n * @return string\n * @static\n */\n public static function cleanRateLimiterKey($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->cleanRateLimiterKey($key);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\Redirector\n */\n class Redirect {\n /**\n * Create a new redirect response to the previous location.\n *\n * @param int $status\n * @param array $headers\n * @param mixed $fallback\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function back($status = 302, $headers = [], $fallback = false)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->back($status, $headers, $fallback);\n }\n\n /**\n * Create a new redirect response to the current URI.\n *\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function refresh($status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->refresh($status, $headers);\n }\n\n /**\n * Create a new redirect response, while putting the current URL in the session.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function guest($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->guest($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the previously intended location.\n *\n * @param mixed $default\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function intended($default = '/', $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->intended($default, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the given path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function to($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->to($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to an external URL (no validation).\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function away($path, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->away($path, $status, $headers);\n }\n\n /**\n * Create a new redirect response to the given HTTPS path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function secure($path, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->secure($path, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function route($route, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->route($route, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a signed named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function signedRoute($route, $parameters = [], $expiration = null, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->signedRoute($route, $parameters, $expiration, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a signed named route.\n *\n * @param \\BackedEnum|string $route\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function temporarySignedRoute($route, $expiration, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->temporarySignedRoute($route, $expiration, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a controller action.\n *\n * @param string|array $action\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function action($action, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->action($action, $parameters, $status, $headers);\n }\n\n /**\n * Get the URL generator instance.\n *\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function getUrlGenerator()\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->getUrlGenerator();\n }\n\n /**\n * Set the active session store.\n *\n * @param \\Illuminate\\Session\\Store $session\n * @return void\n * @static\n */\n public static function setSession($session)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n $instance->setSession($session);\n }\n\n /**\n * Get the \"intended\" URL from the session.\n *\n * @return string|null\n * @static\n */\n public static function getIntendedUrl()\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->getIntendedUrl();\n }\n\n /**\n * Set the \"intended\" URL in the session.\n *\n * @param string $url\n * @return \\Illuminate\\Routing\\Redirector\n * @static\n */\n public static function setIntendedUrl($url)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->setIntendedUrl($url);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\Redirector::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\Redirector::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\Redirector::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\Redirector::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Http\\Request\n */\n class Request {\n /**\n * Create a new Illuminate HTTP request from server variables.\n *\n * @return static\n * @static\n */\n public static function capture()\n {\n return \\Illuminate\\Http\\Request::capture();\n }\n\n /**\n * Return the Request instance.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function instance()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->instance();\n }\n\n /**\n * Get the request method.\n *\n * @return string\n * @static\n */\n public static function method()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->method();\n }\n\n /**\n * Get a URI instance for the request.\n *\n * @return \\Illuminate\\Support\\Uri\n * @static\n */\n public static function uri()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->uri();\n }\n\n /**\n * Get the root URL for the application.\n *\n * @return string\n * @static\n */\n public static function root()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->root();\n }\n\n /**\n * Get the URL (no query string) for the request.\n *\n * @return string\n * @static\n */\n public static function url()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->url();\n }\n\n /**\n * Get the full URL for the request.\n *\n * @return string\n * @static\n */\n public static function fullUrl()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrl();\n }\n\n /**\n * Get the full URL for the request with the added query string parameters.\n *\n * @param array $query\n * @return string\n * @static\n */\n public static function fullUrlWithQuery($query)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlWithQuery($query);\n }\n\n /**\n * Get the full URL for the request without the given query string parameters.\n *\n * @param array|string $keys\n * @return string\n * @static\n */\n public static function fullUrlWithoutQuery($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlWithoutQuery($keys);\n }\n\n /**\n * Get the current path info for the request.\n *\n * @return string\n * @static\n */\n public static function path()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->path();\n }\n\n /**\n * Get the current decoded path info for the request.\n *\n * @return string\n * @static\n */\n public static function decodedPath()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->decodedPath();\n }\n\n /**\n * Get a segment from the URI (1 based index).\n *\n * @param int $index\n * @param string|null $default\n * @return string|null\n * @static\n */\n public static function segment($index, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->segment($index, $default);\n }\n\n /**\n * Get all of the segments for the request path.\n *\n * @return array\n * @static\n */\n public static function segments()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->segments();\n }\n\n /**\n * Determine if the current request URI matches a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function is(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->is(...$patterns);\n }\n\n /**\n * Determine if the route name matches a given pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function routeIs(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->routeIs(...$patterns);\n }\n\n /**\n * Determine if the current request URL and query string match a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function fullUrlIs(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlIs(...$patterns);\n }\n\n /**\n * Get the host name.\n *\n * @return string\n * @static\n */\n public static function host()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->host();\n }\n\n /**\n * Get the HTTP host being requested.\n *\n * @return string\n * @static\n */\n public static function httpHost()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->httpHost();\n }\n\n /**\n * Get the scheme and HTTP host.\n *\n * @return string\n * @static\n */\n public static function schemeAndHttpHost()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->schemeAndHttpHost();\n }\n\n /**\n * Determine if the request is the result of an AJAX call.\n *\n * @return bool\n * @static\n */\n public static function ajax()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ajax();\n }\n\n /**\n * Determine if the request is the result of a PJAX call.\n *\n * @return bool\n * @static\n */\n public static function pjax()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->pjax();\n }\n\n /**\n * Determine if the request is the result of a prefetch call.\n *\n * @return bool\n * @static\n */\n public static function prefetch()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->prefetch();\n }\n\n /**\n * Determine if the request is over HTTPS.\n *\n * @return bool\n * @static\n */\n public static function secure()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->secure();\n }\n\n /**\n * Get the client IP address.\n *\n * @return string|null\n * @static\n */\n public static function ip()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ip();\n }\n\n /**\n * Get the client IP addresses.\n *\n * @return array\n * @static\n */\n public static function ips()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ips();\n }\n\n /**\n * Get the client user agent.\n *\n * @return string|null\n * @static\n */\n public static function userAgent()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->userAgent();\n }\n\n /**\n * Merge new input into the current request's input array.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function merge($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->merge($input);\n }\n\n /**\n * Merge new input into the request's input, but only when that key is missing from the request.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function mergeIfMissing($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->mergeIfMissing($input);\n }\n\n /**\n * Replace the input values for the current request.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function replace($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->replace($input);\n }\n\n /**\n * This method belongs to Symfony HttpFoundation and is not usually needed when using Laravel.\n * \n * Instead, you may use the \"input\" method.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get the JSON payload for the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return ($key is null ? \\Symfony\\Component\\HttpFoundation\\InputBag : mixed)\n * @static\n */\n public static function json($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->json($key, $default);\n }\n\n /**\n * Create a new request instance from the given Laravel request.\n *\n * @param \\Illuminate\\Http\\Request $from\n * @param \\Illuminate\\Http\\Request|null $to\n * @return static\n * @static\n */\n public static function createFrom($from, $to = null)\n {\n return \\Illuminate\\Http\\Request::createFrom($from, $to);\n }\n\n /**\n * Create an Illuminate request from a Symfony instance.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @return static\n * @static\n */\n public static function createFromBase($request)\n {\n return \\Illuminate\\Http\\Request::createFromBase($request);\n }\n\n /**\n * Clones a request and overrides some of its parameters.\n *\n * @return static\n * @param array|null $query The GET parameters\n * @param array|null $request The POST parameters\n * @param array|null $attributes The request attributes (parameters parsed from the PATH_INFO, ...)\n * @param array|null $cookies The COOKIE parameters\n * @param array|null $files The FILES parameters\n * @param array|null $server The SERVER parameters\n * @static\n */\n public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->duplicate($query, $request, $attributes, $cookies, $files, $server);\n }\n\n /**\n * Whether the request contains a Session object.\n * \n * This method does not give any information about the state of the session object,\n * like whether the session is started or not. It is just a way to check if this Request\n * is associated with a Session instance.\n *\n * @param bool $skipIfUninitialized When true, ignores factories injected by `setSessionFactory`\n * @static\n */\n public static function hasSession($skipIfUninitialized = false)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasSession($skipIfUninitialized);\n }\n\n /**\n * Gets the Session.\n *\n * @throws SessionNotFoundException When session is not set properly\n * @static\n */\n public static function getSession()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getSession();\n }\n\n /**\n * Get the session associated with the request.\n *\n * @return \\Illuminate\\Contracts\\Session\\Session\n * @throws \\RuntimeException\n * @static\n */\n public static function session()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->session();\n }\n\n /**\n * Set the session instance on the request.\n *\n * @param \\Illuminate\\Contracts\\Session\\Session $session\n * @return void\n * @static\n */\n public static function setLaravelSession($session)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setLaravelSession($session);\n }\n\n /**\n * Set the locale for the request instance.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setRequestLocale($locale)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setRequestLocale($locale);\n }\n\n /**\n * Set the default locale for the request instance.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setDefaultRequestLocale($locale)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setDefaultRequestLocale($locale);\n }\n\n /**\n * Get the user making the request.\n *\n * @param string|null $guard\n * @return mixed\n * @static\n */\n public static function user($guard = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->user($guard);\n }\n\n /**\n * Get the route handling the request.\n *\n * @param string|null $param\n * @param mixed $default\n * @return ($param is null ? \\Illuminate\\Routing\\Route : object|string|null)\n * @static\n */\n public static function route($param = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->route($param, $default);\n }\n\n /**\n * Get a unique fingerprint for the request / route / IP address.\n *\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function fingerprint()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fingerprint();\n }\n\n /**\n * Set the JSON payload for the request.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\InputBag $json\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setJson($json)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setJson($json);\n }\n\n /**\n * Get the user resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function getUserResolver()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUserResolver();\n }\n\n /**\n * Set the user resolver callback.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setUserResolver($callback)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setUserResolver($callback);\n }\n\n /**\n * Get the route resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function getRouteResolver()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRouteResolver();\n }\n\n /**\n * Set the route resolver callback.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setRouteResolver($callback)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setRouteResolver($callback);\n }\n\n /**\n * Get all of the input and files for the request.\n *\n * @return array\n * @static\n */\n public static function toArray()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->toArray();\n }\n\n /**\n * Determine if the given offset exists.\n *\n * @param string $offset\n * @return bool\n * @static\n */\n public static function offsetExists($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->offsetExists($offset);\n }\n\n /**\n * Get the value at the given offset.\n *\n * @param string $offset\n * @return mixed\n * @static\n */\n public static function offsetGet($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->offsetGet($offset);\n }\n\n /**\n * Set the value at the given offset.\n *\n * @param string $offset\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($offset, $value)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->offsetSet($offset, $value);\n }\n\n /**\n * Remove the value at the given offset.\n *\n * @param string $offset\n * @return void\n * @static\n */\n public static function offsetUnset($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->offsetUnset($offset);\n }\n\n /**\n * Sets the parameters for this request.\n * \n * This method also re-initializes all properties.\n *\n * @param array $query The GET parameters\n * @param array $request The POST parameters\n * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...)\n * @param array $cookies The COOKIE parameters\n * @param array $files The FILES parameters\n * @param array $server The SERVER parameters\n * @param string|resource|null $content The raw body data\n * @static\n */\n public static function initialize($query = [], $request = [], $attributes = [], $cookies = [], $files = [], $server = [], $content = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->initialize($query, $request, $attributes, $cookies, $files, $server, $content);\n }\n\n /**\n * Creates a new request with values from PHP's super globals.\n *\n * @static\n */\n public static function createFromGlobals()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::createFromGlobals();\n }\n\n /**\n * Creates a Request based on a given URI and configuration.\n * \n * The information contained in the URI always take precedence\n * over the other information (server and parameters).\n *\n * @param string $uri The URI\n * @param string $method The HTTP method\n * @param array $parameters The query (GET) or request (POST) parameters\n * @param array $cookies The request cookies ($_COOKIE)\n * @param array $files The request files ($_FILES)\n * @param array $server The server parameters ($_SERVER)\n * @param string|resource|null $content The raw body data\n * @throws BadRequestException When the URI is invalid\n * @static\n */\n public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::create($uri, $method, $parameters, $cookies, $files, $server, $content);\n }\n\n /**\n * Sets a callable able to create a Request instance.\n * \n * This is mainly useful when you need to override the Request class\n * to keep BC with an existing system. It should not be used for any\n * other purpose.\n *\n * @static\n */\n public static function setFactory($callable)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setFactory($callable);\n }\n\n /**\n * Overrides the PHP global variables according to this request instance.\n * \n * It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE.\n * $_FILES is never overridden, see rfc1867\n *\n * @static\n */\n public static function overrideGlobals()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->overrideGlobals();\n }\n\n /**\n * Sets a list of trusted proxies.\n * \n * You should only list the reverse proxies that you manage directly.\n *\n * @param array $proxies A list of trusted proxies, the string 'REMOTE_ADDR' will be replaced with $_SERVER['REMOTE_ADDR'] and 'PRIVATE_SUBNETS' by IpUtils::PRIVATE_SUBNETS\n * @param int-mask-of<Request::HEADER_*> $trustedHeaderSet A bit field to set which headers to trust from your proxies\n * @static\n */\n public static function setTrustedProxies($proxies, $trustedHeaderSet)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setTrustedProxies($proxies, $trustedHeaderSet);\n }\n\n /**\n * Gets the list of trusted proxies.\n *\n * @return string[]\n * @static\n */\n public static function getTrustedProxies()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedProxies();\n }\n\n /**\n * Gets the set of trusted headers from trusted proxies.\n *\n * @return int A bit field of Request::HEADER_* that defines which headers are trusted from your proxies\n * @static\n */\n public static function getTrustedHeaderSet()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedHeaderSet();\n }\n\n /**\n * Sets a list of trusted host patterns.\n * \n * You should only list the hosts you manage using regexs.\n *\n * @param array $hostPatterns A list of trusted host patterns\n * @static\n */\n public static function setTrustedHosts($hostPatterns)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setTrustedHosts($hostPatterns);\n }\n\n /**\n * Gets the list of trusted host patterns.\n *\n * @return string[]\n * @static\n */\n public static function getTrustedHosts()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedHosts();\n }\n\n /**\n * Normalizes a query string.\n * \n * It builds a normalized query string, where keys/value pairs are alphabetized,\n * have consistent escaping and unneeded delimiters are removed.\n *\n * @static\n */\n public static function normalizeQueryString($qs)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::normalizeQueryString($qs);\n }\n\n /**\n * Enables support for the _method request parameter to determine the intended HTTP method.\n * \n * Be warned that enabling this feature might lead to CSRF issues in your code.\n * Check that you are using CSRF tokens when required.\n * If the HTTP method parameter override is enabled, an html-form with method \"POST\" can be altered\n * and used to send a \"PUT\" or \"DELETE\" request via the _method request parameter.\n * If these methods are not protected against CSRF, this presents a possible vulnerability.\n * \n * The HTTP method can only be overridden when the real HTTP method is POST.\n *\n * @static\n */\n public static function enableHttpMethodParameterOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::enableHttpMethodParameterOverride();\n }\n\n /**\n * Checks whether support for the _method request parameter is enabled.\n *\n * @static\n */\n public static function getHttpMethodParameterOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getHttpMethodParameterOverride();\n }\n\n /**\n * Sets the list of HTTP methods that can be overridden.\n * \n * Set to null to allow all methods to be overridden (default). Set to an\n * empty array to disallow overrides entirely. Otherwise, provide the list\n * of uppercased method names that are allowed.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\uppercase-string[]|null $methods\n * @static\n */\n public static function setAllowedHttpMethodOverride($methods)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setAllowedHttpMethodOverride($methods);\n }\n\n /**\n * Gets the list of HTTP methods that can be overridden.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\uppercase-string[]|null\n * @static\n */\n public static function getAllowedHttpMethodOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getAllowedHttpMethodOverride();\n }\n\n /**\n * Whether the request contains a Session which was started in one of the\n * previous requests.\n *\n * @static\n */\n public static function hasPreviousSession()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasPreviousSession();\n }\n\n /**\n * @static\n */\n public static function setSession($session)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setSession($session);\n }\n\n /**\n * @internal\n * @param callable(): SessionInterface $factory\n * @static\n */\n public static function setSessionFactory($factory)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setSessionFactory($factory);\n }\n\n /**\n * Returns the client IP addresses.\n * \n * In the returned array the most trusted IP address is first, and the\n * least trusted one last. The \"real\" client IP address is the last one,\n * but this is also the least trusted one. Trusted proxies are stripped.\n * \n * Use this method carefully; you should use getClientIp() instead.\n *\n * @see getClientIp()\n * @static\n */\n public static function getClientIps()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getClientIps();\n }\n\n /**\n * Returns the client IP address.\n * \n * This method can read the client IP address from the \"X-Forwarded-For\" header\n * when trusted proxies were set via \"setTrustedProxies()\". The \"X-Forwarded-For\"\n * header value is a comma+space separated list of IP addresses, the left-most\n * being the original client, and each successive proxy that passed the request\n * adding the IP address where it received the request from.\n * \n * If your reverse proxy uses a different header name than \"X-Forwarded-For\",\n * (\"Client-Ip\" for instance), configure it via the $trustedHeaderSet\n * argument of the Request::setTrustedProxies() method instead.\n *\n * @see getClientIps()\n * @see https://wikipedia.org/wiki/X-Forwarded-For\n * @static\n */\n public static function getClientIp()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getClientIp();\n }\n\n /**\n * Returns current script name.\n *\n * @static\n */\n public static function getScriptName()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getScriptName();\n }\n\n /**\n * Returns the path being requested relative to the executed script.\n * \n * The path info always starts with a /.\n * \n * Suppose this request is instantiated from /mysite on localhost:\n * \n * * http://localhost/mysite returns an empty string\n * * http://localhost/mysite/about returns '/about'\n * * http://localhost/mysite/enco%20ded returns '/enco%20ded'\n * * http://localhost/mysite/about?var=1 returns '/about'\n *\n * @return string The raw path (i.e. not urldecoded)\n * @static\n */\n public static function getPathInfo()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPathInfo();\n }\n\n /**\n * Returns the root path from which this request is executed.\n * \n * Suppose that an index.php file instantiates this request object:\n * \n * * http://localhost/index.php returns an empty string\n * * http://localhost/index.php/page returns an empty string\n * * http://localhost/web/index.php returns '/web'\n * * http://localhost/we%20b/index.php returns '/we%20b'\n *\n * @return string The raw path (i.e. not urldecoded)\n * @static\n */\n public static function getBasePath()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getBasePath();\n }\n\n /**\n * Returns the root URL from which this request is executed.\n * \n * The base URL never ends with a /.\n * \n * This is similar to getBasePath(), except that it also includes the\n * script filename (e.g. index.php) if one exists.\n *\n * @return string The raw URL (i.e. not urldecoded)\n * @static\n */\n public static function getBaseUrl()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getBaseUrl();\n }\n\n /**\n * Gets the request's scheme.\n *\n * @static\n */\n public static function getScheme()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getScheme();\n }\n\n /**\n * Returns the port on which the request is made.\n * \n * This method can read the client port from the \"X-Forwarded-Port\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Port\" header must contain the client port.\n *\n * @return int|string|null Can be a string if fetched from the server bag\n * @static\n */\n public static function getPort()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPort();\n }\n\n /**\n * Returns the user.\n *\n * @static\n */\n public static function getUser()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUser();\n }\n\n /**\n * Returns the password.\n *\n * @static\n */\n public static function getPassword()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPassword();\n }\n\n /**\n * Gets the user info.\n *\n * @return string|null A user name if any and, optionally, scheme-specific information about how to gain authorization to access the server\n * @static\n */\n public static function getUserInfo()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUserInfo();\n }\n\n /**\n * Returns the HTTP host being requested.\n * \n * The port name will be appended to the host if it's non-standard.\n *\n * @static\n */\n public static function getHttpHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getHttpHost();\n }\n\n /**\n * Returns the requested URI (path and query string).\n *\n * @return string The raw URI (i.e. not URI decoded)\n * @static\n */\n public static function getRequestUri()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRequestUri();\n }\n\n /**\n * Gets the scheme and HTTP host.\n * \n * If the URL was called with basic authentication, the user\n * and the password are not added to the generated string.\n *\n * @static\n */\n public static function getSchemeAndHttpHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getSchemeAndHttpHost();\n }\n\n /**\n * Generates a normalized URI (URL) for the Request.\n *\n * @see getQueryString()\n * @static\n */\n public static function getUri()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUri();\n }\n\n /**\n * Generates a normalized URI for the given path.\n *\n * @param string $path A path to use instead of the current one\n * @static\n */\n public static function getUriForPath($path)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUriForPath($path);\n }\n\n /**\n * Returns the path as relative reference from the current Request path.\n * \n * Only the URIs path component (no schema, host etc.) is relevant and must be given.\n * Both paths must be absolute and not contain relative parts.\n * Relative URLs from one resource to another are useful when generating self-contained downloadable document archives.\n * Furthermore, they can be used to reduce the link size in documents.\n * \n * Example target paths, given a base path of \"/a/b/c/d\":\n * - \"/a/b/c/d\" -> \"\"\n * - \"/a/b/c/\" -> \"./\"\n * - \"/a/b/\" -> \"../\"\n * - \"/a/b/c/other\" -> \"other\"\n * - \"/a/x/y\" -> \"../../x/y\"\n *\n * @static\n */\n public static function getRelativeUriForPath($path)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRelativeUriForPath($path);\n }\n\n /**\n * Generates the normalized query string for the Request.\n * \n * It builds a normalized query string, where keys/value pairs are alphabetized\n * and have consistent escaping.\n *\n * @static\n */\n public static function getQueryString()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getQueryString();\n }\n\n /**\n * Checks whether the request is secure or not.\n * \n * This method can read the client protocol from the \"X-Forwarded-Proto\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Proto\" header must contain the protocol: \"https\" or \"http\".\n *\n * @static\n */\n public static function isSecure()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isSecure();\n }\n\n /**\n * Returns the host name.\n * \n * This method can read the client host name from the \"X-Forwarded-Host\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Host\" header must contain the client host name.\n *\n * @throws SuspiciousOperationException when the host name is invalid or not trusted\n * @static\n */\n public static function getHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getHost();\n }\n\n /**\n * Sets the request method.\n *\n * @static\n */\n public static function setMethod($method)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setMethod($method);\n }\n\n /**\n * Gets the request \"intended\" method.\n * \n * If the X-HTTP-Method-Override header is set, and if the method is a POST,\n * then it is used to determine the \"real\" intended HTTP method.\n * \n * The _method request parameter can also be used to determine the HTTP method,\n * but only if enableHttpMethodParameterOverride() has been called.\n * \n * The method is always an uppercased string.\n *\n * @see getRealMethod()\n * @static\n */\n public static function getMethod()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getMethod();\n }\n\n /**\n * Gets the \"real\" request method.\n *\n * @see getMethod()\n * @static\n */\n public static function getRealMethod()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRealMethod();\n }\n\n /**\n * Gets the mime type associated with the format.\n *\n * @static\n */\n public static function getMimeType($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getMimeType($format);\n }\n\n /**\n * Gets the mime types associated with the format.\n *\n * @return string[]\n * @static\n */\n public static function getMimeTypes($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getMimeTypes($format);\n }\n\n /**\n * Gets the format associated with the mime type.\n * \n * Resolution order:\n * 1) Exact match on the full MIME type (e.g. \"application/json\").\n * 2) Match on the canonical MIME type (i.e. before the first \";\" parameter).\n * 3) If the type is \"application/*+suffix\", use the structured syntax suffix\n * mapping (e.g. \"application/foo+json\" → \"json\"), when available.\n * 4) If $subtypeFallback is true and no match was found:\n * - return the MIME subtype (without \"x-\" prefix), provided it does not\n * contain a \"+\" (e.g. \"application/x-yaml\" → \"yaml\", \"text/csv\" → \"csv\").\n *\n * @param string|null $mimeType The mime type to check\n * @param bool $subtypeFallback Whether to fall back to the subtype if no exact match is found\n * @static\n */\n public static function getFormat($mimeType)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getFormat($mimeType);\n }\n\n /**\n * Associates a format with mime types.\n *\n * @param string $format The format to set\n * @param string|string[] $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type)\n * @static\n */\n public static function setFormat($format, $mimeTypes)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setFormat($format, $mimeTypes);\n }\n\n /**\n * Gets the request format.\n * \n * Here is the process to determine the format:\n * \n * * format defined by the user (with setRequestFormat())\n * * _format request attribute\n * * $default\n *\n * @see getPreferredFormat\n * @static\n */\n public static function getRequestFormat($default = 'html')\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRequestFormat($default);\n }\n\n /**\n * Sets the request format.\n *\n * @static\n */\n public static function setRequestFormat($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setRequestFormat($format);\n }\n\n /**\n * Gets the usual name of the format associated with the request's media type (provided in the Content-Type header).\n *\n * @see Request::$formats\n * @static\n */\n public static function getContentTypeFormat()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getContentTypeFormat();\n }\n\n /**\n * Sets the default locale.\n *\n * @static\n */\n public static function setDefaultLocale($locale)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setDefaultLocale($locale);\n }\n\n /**\n * Get the default locale.\n *\n * @static\n */\n public static function getDefaultLocale()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getDefaultLocale();\n }\n\n /**\n * Sets the locale.\n *\n * @static\n */\n public static function setLocale($locale)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setLocale($locale);\n }\n\n /**\n * Get the locale.\n *\n * @static\n */\n public static function getLocale()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getLocale();\n }\n\n /**\n * Checks if the request method is of specified type.\n *\n * @param string $method Uppercase request method (GET, POST etc)\n * @static\n */\n public static function isMethod($method)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethod($method);\n }\n\n /**\n * Checks whether or not the method is safe.\n *\n * @see https://tools.ietf.org/html/rfc7231#section-4.2.1\n * @static\n */\n public static function isMethodSafe()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodSafe();\n }\n\n /**\n * Checks whether or not the method is idempotent.\n *\n * @static\n */\n public static function isMethodIdempotent()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodIdempotent();\n }\n\n /**\n * Checks whether the method is cacheable or not.\n *\n * @see https://tools.ietf.org/html/rfc7231#section-4.2.3\n * @static\n */\n public static function isMethodCacheable()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodCacheable();\n }\n\n /**\n * Returns the protocol version.\n * \n * If the application is behind a proxy, the protocol version used in the\n * requests between the client and the proxy and between the proxy and the\n * server might be different. This returns the former (from the \"Via\" header)\n * if the proxy is trusted (see \"setTrustedProxies()\"), otherwise it returns\n * the latter (from the \"SERVER_PROTOCOL\" server parameter).\n *\n * @static\n */\n public static function getProtocolVersion()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getProtocolVersion();\n }\n\n /**\n * Returns the request body content.\n *\n * @param bool $asResource If true, a resource will be returned\n * @return string|resource\n * @psalm-return ($asResource is true ? resource : string)\n * @static\n */\n public static function getContent($asResource = false)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getContent($asResource);\n }\n\n /**\n * Gets the decoded form or json request body.\n *\n * @throws JsonException When the body cannot be decoded to an array\n * @static\n */\n public static function getPayload()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPayload();\n }\n\n /**\n * Gets the Etags.\n *\n * @static\n */\n public static function getETags()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getETags();\n }\n\n /**\n * @static\n */\n public static function isNoCache()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isNoCache();\n }\n\n /**\n * Gets the preferred format for the response by inspecting, in the following order:\n * * the request format set using setRequestFormat;\n * * the values of the Accept HTTP header.\n * \n * Note that if you use this method, you should send the \"Vary: Accept\" header\n * in the response to prevent any issues with intermediary HTTP caches.\n *\n * @static\n */\n public static function getPreferredFormat($default = 'html')\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPreferredFormat($default);\n }\n\n /**\n * Returns the preferred language.\n *\n * @param string[] $locales An array of ordered available locales\n * @static\n */\n public static function getPreferredLanguage($locales = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPreferredLanguage($locales);\n }\n\n /**\n * Gets a list of languages acceptable by the client browser ordered in the user browser preferences.\n *\n * @return string[]\n * @static\n */\n public static function getLanguages()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getLanguages();\n }\n\n /**\n * Gets a list of charsets acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getCharsets()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getCharsets();\n }\n\n /**\n * Gets a list of encodings acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getEncodings()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getEncodings();\n }\n\n /**\n * Gets a list of content types acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getAcceptableContentTypes()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getAcceptableContentTypes();\n }\n\n /**\n * Returns true if the request is an XMLHttpRequest.\n * \n * It works if your JavaScript library sets an X-Requested-With HTTP header.\n * It is known to work with common JavaScript frameworks:\n *\n * @see https://wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript\n * @static\n */\n public static function isXmlHttpRequest()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isXmlHttpRequest();\n }\n\n /**\n * Checks whether the client browser prefers safe content or not according to RFC8674.\n *\n * @see https://tools.ietf.org/html/rfc8674\n * @static\n */\n public static function preferSafeContent()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->preferSafeContent();\n }\n\n /**\n * Indicates whether this request originated from a trusted proxy.\n * \n * This can be useful to determine whether or not to trust the\n * contents of a proxy-specific header.\n *\n * @static\n */\n public static function isFromTrustedProxy()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isFromTrustedProxy();\n }\n\n /**\n * Filter the given array of rules into an array of rules that are included in precognitive headers.\n *\n * @param array $rules\n * @return array\n * @static\n */\n public static function filterPrecognitiveRules($rules)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->filterPrecognitiveRules($rules);\n }\n\n /**\n * Determine if the request is attempting to be precognitive.\n *\n * @return bool\n * @static\n */\n public static function isAttemptingPrecognition()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isAttemptingPrecognition();\n }\n\n /**\n * Determine if the request is precognitive.\n *\n * @return bool\n * @static\n */\n public static function isPrecognitive()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isPrecognitive();\n }\n\n /**\n * Determine if the request is sending JSON.\n *\n * @return bool\n * @static\n */\n public static function isJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isJson();\n }\n\n /**\n * Determine if the current request probably expects a JSON response.\n *\n * @return bool\n * @static\n */\n public static function expectsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->expectsJson();\n }\n\n /**\n * Determine if the current request is asking for JSON.\n *\n * @return bool\n * @static\n */\n public static function wantsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->wantsJson();\n }\n\n /**\n * Determines whether the current requests accepts a given content type.\n *\n * @param string|array $contentTypes\n * @return bool\n * @static\n */\n public static function accepts($contentTypes)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->accepts($contentTypes);\n }\n\n /**\n * Return the most suitable content type from the given array based on content negotiation.\n *\n * @param string|array $contentTypes\n * @return string|null\n * @static\n */\n public static function prefers($contentTypes)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->prefers($contentTypes);\n }\n\n /**\n * Determine if the current request accepts any content type.\n *\n * @return bool\n * @static\n */\n public static function acceptsAnyContentType()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsAnyContentType();\n }\n\n /**\n * Determines whether a request accepts JSON.\n *\n * @return bool\n * @static\n */\n public static function acceptsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsJson();\n }\n\n /**\n * Determines whether a request accepts HTML.\n *\n * @return bool\n * @static\n */\n public static function acceptsHtml()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsHtml();\n }\n\n /**\n * Determine if the given content types match.\n *\n * @param string $actual\n * @param string $type\n * @return bool\n * @static\n */\n public static function matchesType($actual, $type)\n {\n return \\Illuminate\\Http\\Request::matchesType($actual, $type);\n }\n\n /**\n * Get the data format expected in the response.\n *\n * @param string $default\n * @return string\n * @static\n */\n public static function format($default = 'html')\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->format($default);\n }\n\n /**\n * Retrieve an old input item.\n *\n * @param string|null $key\n * @param \\Illuminate\\Database\\Eloquent\\Model|string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function old($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->old($key, $default);\n }\n\n /**\n * Flash the input for the current request to the session.\n *\n * @return void\n * @static\n */\n public static function flash()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flash();\n }\n\n /**\n * Flash only some of the input to the session.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function flashOnly($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flashOnly($keys);\n }\n\n /**\n * Flash only some of the input to the session.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function flashExcept($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flashExcept($keys);\n }\n\n /**\n * Flush all of the old input from the session.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flush();\n }\n\n /**\n * Retrieve a server variable from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function server($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->server($key, $default);\n }\n\n /**\n * Determine if a header is set on the request.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasHeader($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasHeader($key);\n }\n\n /**\n * Retrieve a header from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function header($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->header($key, $default);\n }\n\n /**\n * Get the bearer token from the request headers.\n *\n * @return string|null\n * @static\n */\n public static function bearerToken()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->bearerToken();\n }\n\n /**\n * Get the keys for all of the input and files.\n *\n * @return array\n * @static\n */\n public static function keys()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->keys();\n }\n\n /**\n * Get all of the input and files for the request.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function all($keys = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->all($keys);\n }\n\n /**\n * Retrieve an input item from the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function input($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->input($key, $default);\n }\n\n /**\n * Retrieve input from the request as a Fluent object instance.\n *\n * @param array|string|null $key\n * @return \\Illuminate\\Support\\Fluent\n * @static\n */\n public static function fluent($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fluent($key);\n }\n\n /**\n * Retrieve a query string item from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function query($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->query($key, $default);\n }\n\n /**\n * Retrieve a request payload item from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function post($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->post($key, $default);\n }\n\n /**\n * Determine if a cookie is set on the request.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasCookie($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasCookie($key);\n }\n\n /**\n * Retrieve a cookie from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function cookie($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->cookie($key, $default);\n }\n\n /**\n * Get an array of all of the files on the request.\n *\n * @return array<string, \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]>\n * @static\n */\n public static function allFiles()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->allFiles();\n }\n\n /**\n * Determine if the uploaded data contains a file.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasFile($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasFile($key);\n }\n\n /**\n * Retrieve a file from the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return ($key is null ? array<string, \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]> : \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]|null)\n * @static\n */\n public static function file($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->file($key, $default);\n }\n\n /**\n * Dump the items.\n *\n * @param mixed $keys\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function dump($keys = [])\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->dump($keys);\n }\n\n /**\n * Dump the given arguments and terminate execution.\n *\n * @param mixed $args\n * @return never\n * @static\n */\n public static function dd(...$args)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->dd(...$args);\n }\n\n /**\n * Determine if the data contains a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function exists($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->exists($key);\n }\n\n /**\n * Determine if the data contains a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if the instance contains any of the given keys.\n *\n * @param string|array $keys\n * @return bool\n * @static\n */\n public static function hasAny($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasAny($keys);\n }\n\n /**\n * Apply the callback if the instance contains the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenHas($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenHas($key, $callback, $default);\n }\n\n /**\n * Determine if the instance contains a non-empty value for the given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function filled($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->filled($key);\n }\n\n /**\n * Determine if the instance contains an empty value for the given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function isNotFilled($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isNotFilled($key);\n }\n\n /**\n * Determine if the instance contains a non-empty value for any of the given keys.\n *\n * @param string|array $keys\n * @return bool\n * @static\n */\n public static function anyFilled($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->anyFilled($keys);\n }\n\n /**\n * Apply the callback if the instance contains a non-empty value for the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenFilled($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenFilled($key, $callback, $default);\n }\n\n /**\n * Determine if the instance is missing a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->missing($key);\n }\n\n /**\n * Apply the callback if the instance is missing the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenMissing($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenMissing($key, $callback, $default);\n }\n\n /**\n * Retrieve data from the instance as a Stringable instance.\n *\n * @param string $key\n * @param mixed $default\n * @return \\Illuminate\\Support\\Stringable\n * @static\n */\n public static function str($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->str($key, $default);\n }\n\n /**\n * Retrieve data from the instance as a Stringable instance.\n *\n * @param string $key\n * @param mixed $default\n * @return \\Illuminate\\Support\\Stringable\n * @static\n */\n public static function string($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->string($key, $default);\n }\n\n /**\n * Retrieve data as a boolean value.\n * \n * Returns true when value is \"1\", \"true\", \"on\", and \"yes\". Otherwise, returns false.\n *\n * @param string|null $key\n * @param bool $default\n * @return bool\n * @static\n */\n public static function boolean($key = null, $default = false)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->boolean($key, $default);\n }\n\n /**\n * Retrieve data as an integer value.\n *\n * @param string $key\n * @param int $default\n * @return int\n * @static\n */\n public static function integer($key, $default = 0)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->integer($key, $default);\n }\n\n /**\n * Retrieve data as a float value.\n *\n * @param string $key\n * @param float $default\n * @return float\n * @static\n */\n public static function float($key, $default = 0.0)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->float($key, $default);\n }\n\n /**\n * Retrieve data from the instance as a Carbon instance.\n *\n * @param string $key\n * @param string|null $format\n * @param \\UnitEnum|string|null $tz\n * @return \\Illuminate\\Support\\Carbon|null\n * @throws \\Carbon\\Exceptions\\InvalidFormatException\n * @static\n */\n public static function date($key, $format = null, $tz = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->date($key, $format, $tz);\n }\n\n /**\n * Retrieve data from the instance as an enum.\n *\n * @template TEnum of \\BackedEnum\n * @param string $key\n * @param class-string<TEnum> $enumClass\n * @param TEnum|null $default\n * @return TEnum|null\n * @static\n */\n public static function enum($key, $enumClass, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->enum($key, $enumClass, $default);\n }\n\n /**\n * Retrieve data from the instance as an array of enums.\n *\n * @template TEnum of \\BackedEnum\n * @param string $key\n * @param class-string<TEnum> $enumClass\n * @return TEnum[]\n * @static\n */\n public static function enums($key, $enumClass)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->enums($key, $enumClass);\n }\n\n /**\n * Retrieve data from the instance as an array.\n *\n * @param array|string|null $key\n * @return array\n * @static\n */\n public static function array($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->array($key);\n }\n\n /**\n * Retrieve data from the instance as a collection.\n *\n * @param array|string|null $key\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function collect($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->collect($key);\n }\n\n /**\n * Get a subset containing the provided keys with values from the instance data.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->only($keys);\n }\n\n /**\n * Get all of the data except for a specified array of items.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->except($keys);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Http\\Request::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Http\\Request::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Http\\Request::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Http\\Request::flushMacros();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validate($rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validate($rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param string $errorBag\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validateWithBag($errorBag, $rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validateWithBag($errorBag, $rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignature($absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignature($absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @static\n */\n public static function hasValidRelativeSignature()\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignature();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignatureWhileIgnoring($ignoreQuery, $absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @static\n */\n public static function hasValidRelativeSignatureWhileIgnoring($ignoreQuery = [])\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignatureWhileIgnoring($ignoreQuery);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\ResponseFactory\n */\n class Response {\n /**\n * Create a new response instance.\n *\n * @param mixed $content\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function make($content = '', $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->make($content, $status, $headers);\n }\n\n /**\n * Create a new \"no content\" response.\n *\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function noContent($status = 204, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->noContent($status, $headers);\n }\n\n /**\n * Create a new response for a given view.\n *\n * @param string|array $view\n * @param array $data\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function view($view, $data = [], $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->view($view, $data, $status, $headers);\n }\n\n /**\n * Create a new JSON response instance.\n *\n * @param mixed $data\n * @param int $status\n * @param array $headers\n * @param int $options\n * @return \\Illuminate\\Http\\JsonResponse\n * @static\n */\n public static function json($data = [], $status = 200, $headers = [], $options = 0)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->json($data, $status, $headers, $options);\n }\n\n /**\n * Create a new JSONP response instance.\n *\n * @param string $callback\n * @param mixed $data\n * @param int $status\n * @param array $headers\n * @param int $options\n * @return \\Illuminate\\Http\\JsonResponse\n * @static\n */\n public static function jsonp($callback, $data = [], $status = 200, $headers = [], $options = 0)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->jsonp($callback, $data, $status, $headers, $options);\n }\n\n /**\n * Create a new event stream response.\n *\n * @param \\Closure $callback\n * @param array $headers\n * @param \\Illuminate\\Http\\StreamedEvent|string|null $endStreamWith\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function eventStream($callback, $headers = [], $endStreamWith = '</stream>')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->eventStream($callback, $headers, $endStreamWith);\n }\n\n /**\n * Create a new streamed response instance.\n *\n * @param callable|null $callback\n * @param int $status\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function stream($callback, $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->stream($callback, $status, $headers);\n }\n\n /**\n * Create a new streamed JSON response instance.\n *\n * @param array $data\n * @param int $status\n * @param array $headers\n * @param int $encodingOptions\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedJsonResponse\n * @static\n */\n public static function streamJson($data, $status = 200, $headers = [], $encodingOptions = 15)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->streamJson($data, $status, $headers, $encodingOptions);\n }\n\n /**\n * Create a new streamed response instance as a file download.\n *\n * @param callable $callback\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @throws \\Illuminate\\Routing\\Exceptions\\StreamedResponseException\n * @static\n */\n public static function streamDownload($callback, $name = null, $headers = [], $disposition = 'attachment')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->streamDownload($callback, $name, $headers, $disposition);\n }\n\n /**\n * Create a new file download response.\n *\n * @param \\SplFileInfo|string $file\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n * @static\n */\n public static function download($file, $name = null, $headers = [], $disposition = 'attachment')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->download($file, $name, $headers, $disposition);\n }\n\n /**\n * Return the raw contents of a binary file.\n *\n * @param \\SplFileInfo|string $file\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n * @static\n */\n public static function file($file, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->file($file, $headers);\n }\n\n /**\n * Create a new redirect response to the given path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectTo($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectTo($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to a named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToRoute($route, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToRoute($route, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a controller action.\n *\n * @param array|string $action\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToAction($action, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToAction($action, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response, while putting the current URL in the session.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectGuest($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectGuest($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the previously intended location.\n *\n * @param string $default\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToIntended($default = '/', $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToIntended($default, $status, $headers, $secure);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\ResponseFactory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\ResponseFactory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\ResponseFactory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\ResponseFactory::flushMacros();\n }\n\n /**\n * @see \\Jiminny\\Providers\\ResponseMacroServiceProvider::boot()\n * @param mixed $data\n * @param mixed $status\n * @param array $headers\n * @param mixed $options\n * @static\n */\n public static function twiml($data = null, $status = 200, $headers = [], $options = 0)\n {\n return \\Illuminate\\Routing\\ResponseFactory::twiml($data, $status, $headers, $options);\n }\n\n }\n /**\n * @method static \\Illuminate\\Routing\\RouteRegistrar attribute(string $key, mixed $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereAlpha(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereAlphaNumeric(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereNumber(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereUlid(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereUuid(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereIn(array|string $parameters, array $values)\n * @method static \\Illuminate\\Routing\\RouteRegistrar as(string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar can(\\UnitEnum|string $ability, array|string $models = [])\n * @method static \\Illuminate\\Routing\\RouteRegistrar controller(string $controller)\n * @method static \\Illuminate\\Routing\\RouteRegistrar domain(\\BackedEnum|string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar middleware(array|string|null $middleware)\n * @method static \\Illuminate\\Routing\\RouteRegistrar missing(\\Closure $missing)\n * @method static \\Illuminate\\Routing\\RouteRegistrar name(\\BackedEnum|string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar namespace(string|null $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar prefix(string $prefix)\n * @method static \\Illuminate\\Routing\\RouteRegistrar scopeBindings()\n * @method static \\Illuminate\\Routing\\RouteRegistrar where(array $where)\n * @method static \\Illuminate\\Routing\\RouteRegistrar withoutMiddleware(array|string $middleware)\n * @method static \\Illuminate\\Routing\\RouteRegistrar withoutScopedBindings()\n * @see \\Illuminate\\Routing\\Router\n */\n class Route {\n /**\n * Register a new GET route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function get($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->get($uri, $action);\n }\n\n /**\n * Register a new POST route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function post($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->post($uri, $action);\n }\n\n /**\n * Register a new PUT route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function put($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->put($uri, $action);\n }\n\n /**\n * Register a new PATCH route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function patch($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->patch($uri, $action);\n }\n\n /**\n * Register a new DELETE route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function delete($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->delete($uri, $action);\n }\n\n /**\n * Register a new OPTIONS route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function options($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->options($uri, $action);\n }\n\n /**\n * Register a new route responding to all verbs.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function any($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->any($uri, $action);\n }\n\n /**\n * Register a new fallback route with the router.\n *\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function fallback($action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->fallback($action);\n }\n\n /**\n * Create a redirect from one URI to another.\n *\n * @param string $uri\n * @param string $destination\n * @param int $status\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function redirect($uri, $destination, $status = 302)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->redirect($uri, $destination, $status);\n }\n\n /**\n * Create a permanent redirect from one URI to another.\n *\n * @param string $uri\n * @param string $destination\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function permanentRedirect($uri, $destination)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->permanentRedirect($uri, $destination);\n }\n\n /**\n * Register a new route that returns a view.\n *\n * @param string $uri\n * @param string $view\n * @param array $data\n * @param int|array $status\n * @param array $headers\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function view($uri, $view, $data = [], $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->view($uri, $view, $data, $status, $headers);\n }\n\n /**\n * Register a new route with the given verbs.\n *\n * @param array|string $methods\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function match($methods, $uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->match($methods, $uri, $action);\n }\n\n /**\n * Register an array of resource controllers.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function resources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->resources($resources, $options);\n }\n\n /**\n * Register an array of resource controllers that can be soft deleted.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function softDeletableResources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->softDeletableResources($resources, $options);\n }\n\n /**\n * Route a resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingResourceRegistration\n * @static\n */\n public static function resource($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resource($name, $controller, $options);\n }\n\n /**\n * Register an array of API resource controllers.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function apiResources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->apiResources($resources, $options);\n }\n\n /**\n * Route an API resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingResourceRegistration\n * @static\n */\n public static function apiResource($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->apiResource($name, $controller, $options);\n }\n\n /**\n * Register an array of singleton resource controllers.\n *\n * @param array $singletons\n * @param array $options\n * @return void\n * @static\n */\n public static function singletons($singletons, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->singletons($singletons, $options);\n }\n\n /**\n * Route a singleton resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingSingletonResourceRegistration\n * @static\n */\n public static function singleton($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->singleton($name, $controller, $options);\n }\n\n /**\n * Register an array of API singleton resource controllers.\n *\n * @param array $singletons\n * @param array $options\n * @return void\n * @static\n */\n public static function apiSingletons($singletons, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->apiSingletons($singletons, $options);\n }\n\n /**\n * Route an API singleton resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingSingletonResourceRegistration\n * @static\n */\n public static function apiSingleton($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->apiSingleton($name, $controller, $options);\n }\n\n /**\n * Create a route group with shared attributes.\n *\n * @param array $attributes\n * @param \\Closure|array|string $routes\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function group($attributes, $routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->group($attributes, $routes);\n }\n\n /**\n * Merge the given array with the last group stack.\n *\n * @param array $new\n * @param bool $prependExistingPrefix\n * @return array\n * @static\n */\n public static function mergeWithLastGroup($new, $prependExistingPrefix = true)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->mergeWithLastGroup($new, $prependExistingPrefix);\n }\n\n /**\n * Get the prefix from the last group on the stack.\n *\n * @return string\n * @static\n */\n public static function getLastGroupPrefix()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getLastGroupPrefix();\n }\n\n /**\n * Add a route to the underlying route collection.\n *\n * @param array|string $methods\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function addRoute($methods, $uri, $action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->addRoute($methods, $uri, $action);\n }\n\n /**\n * Create a new Route object.\n *\n * @param array|string $methods\n * @param string $uri\n * @param mixed $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function newRoute($methods, $uri, $action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->newRoute($methods, $uri, $action);\n }\n\n /**\n * Return the response returned by the given route.\n *\n * @param string $name\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function respondWithRoute($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->respondWithRoute($name);\n }\n\n /**\n * Dispatch the request to the application.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function dispatch($request)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->dispatch($request);\n }\n\n /**\n * Dispatch the request to a route and return the response.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function dispatchToRoute($request)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->dispatchToRoute($request);\n }\n\n /**\n * Gather the middleware for the given route with resolved class names.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return array\n * @static\n */\n public static function gatherRouteMiddleware($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->gatherRouteMiddleware($route);\n }\n\n /**\n * Resolve a flat array of middleware classes from the provided array.\n *\n * @param array $middleware\n * @param array $excluded\n * @return array\n * @static\n */\n public static function resolveMiddleware($middleware, $excluded = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resolveMiddleware($middleware, $excluded);\n }\n\n /**\n * Create a response instance from the given value.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param mixed $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function prepareResponse($request, $response)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->prepareResponse($request, $response);\n }\n\n /**\n * Static version of prepareResponse.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param mixed $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function toResponse($request, $response)\n {\n return \\Illuminate\\Routing\\Router::toResponse($request, $response);\n }\n\n /**\n * Substitute the route bindings onto the route.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return \\Illuminate\\Routing\\Route\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<\\Illuminate\\Database\\Eloquent\\Model>\n * @throws \\Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException\n * @static\n */\n public static function substituteBindings($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->substituteBindings($route);\n }\n\n /**\n * Substitute the implicit route bindings for the given route.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return void\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<\\Illuminate\\Database\\Eloquent\\Model>\n * @throws \\Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException\n * @static\n */\n public static function substituteImplicitBindings($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->substituteImplicitBindings($route);\n }\n\n /**\n * Register a callback to run after implicit bindings are substituted.\n *\n * @param callable $callback\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function substituteImplicitBindingsUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->substituteImplicitBindingsUsing($callback);\n }\n\n /**\n * Register a route matched event listener.\n *\n * @param string|callable $callback\n * @return void\n * @static\n */\n public static function matched($callback)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->matched($callback);\n }\n\n /**\n * Get all of the defined middleware short-hand names.\n *\n * @return array\n * @static\n */\n public static function getMiddleware()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getMiddleware();\n }\n\n /**\n * Register a short-hand name for a middleware.\n *\n * @param string $name\n * @param string $class\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function aliasMiddleware($name, $class)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->aliasMiddleware($name, $class);\n }\n\n /**\n * Check if a middlewareGroup with the given name exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMiddlewareGroup($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->hasMiddlewareGroup($name);\n }\n\n /**\n * Get all of the defined middleware groups.\n *\n * @return array\n * @static\n */\n public static function getMiddlewareGroups()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getMiddlewareGroups();\n }\n\n /**\n * Register a group of middleware.\n *\n * @param string $name\n * @param array $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function middlewareGroup($name, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->middlewareGroup($name, $middleware);\n }\n\n /**\n * Add a middleware to the beginning of a middleware group.\n * \n * If the middleware is already in the group, it will not be added again.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function prependMiddlewareToGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->prependMiddlewareToGroup($group, $middleware);\n }\n\n /**\n * Add a middleware to the end of a middleware group.\n * \n * If the middleware is already in the group, it will not be added again.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function pushMiddlewareToGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->pushMiddlewareToGroup($group, $middleware);\n }\n\n /**\n * Remove the given middleware from the specified group.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function removeMiddlewareFromGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->removeMiddlewareFromGroup($group, $middleware);\n }\n\n /**\n * Flush the router's middleware groups.\n *\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function flushMiddlewareGroups()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->flushMiddlewareGroups();\n }\n\n /**\n * Add a new route parameter binder.\n *\n * @param string $key\n * @param string|callable $binder\n * @return void\n * @static\n */\n public static function bind($key, $binder)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->bind($key, $binder);\n }\n\n /**\n * Register a model binder for a wildcard.\n *\n * @param string $key\n * @param string $class\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function model($key, $class, $callback = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->model($key, $class, $callback);\n }\n\n /**\n * Get the binding callback for a given binding.\n *\n * @param string $key\n * @return \\Closure|null\n * @static\n */\n public static function getBindingCallback($key)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getBindingCallback($key);\n }\n\n /**\n * Get the global \"where\" patterns.\n *\n * @return array\n * @static\n */\n public static function getPatterns()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getPatterns();\n }\n\n /**\n * Set a global where pattern on all routes.\n *\n * @param string $key\n * @param string $pattern\n * @return void\n * @static\n */\n public static function pattern($key, $pattern)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->pattern($key, $pattern);\n }\n\n /**\n * Set a group of global where patterns on all routes.\n *\n * @param array $patterns\n * @return void\n * @static\n */\n public static function patterns($patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->patterns($patterns);\n }\n\n /**\n * Determine if the router currently has a group stack.\n *\n * @return bool\n * @static\n */\n public static function hasGroupStack()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->hasGroupStack();\n }\n\n /**\n * Get the current group stack for the router.\n *\n * @return array\n * @static\n */\n public static function getGroupStack()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getGroupStack();\n }\n\n /**\n * Get a route parameter for the current route.\n *\n * @param string $key\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function input($key, $default = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->input($key, $default);\n }\n\n /**\n * Get the request currently being dispatched.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function getCurrentRequest()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getCurrentRequest();\n }\n\n /**\n * Get the currently dispatched route instance.\n *\n * @return \\Illuminate\\Routing\\Route|null\n * @static\n */\n public static function getCurrentRoute()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getCurrentRoute();\n }\n\n /**\n * Get the currently dispatched route instance.\n *\n * @return \\Illuminate\\Routing\\Route|null\n * @static\n */\n public static function current()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->current();\n }\n\n /**\n * Check if a route with the given name exists.\n *\n * @param string|array $name\n * @return bool\n * @static\n */\n public static function has($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->has($name);\n }\n\n /**\n * Get the current route name.\n *\n * @return string|null\n * @static\n */\n public static function currentRouteName()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteName();\n }\n\n /**\n * Alias for the \"currentRouteNamed\" method.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function is(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->is(...$patterns);\n }\n\n /**\n * Determine if the current route matches a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function currentRouteNamed(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteNamed(...$patterns);\n }\n\n /**\n * Get the current route action.\n *\n * @return string|null\n * @static\n */\n public static function currentRouteAction()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteAction();\n }\n\n /**\n * Alias for the \"currentRouteUses\" method.\n *\n * @param array|string $patterns\n * @return bool\n * @static\n */\n public static function uses(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->uses(...$patterns);\n }\n\n /**\n * Determine if the current route action matches a given action.\n *\n * @param string $action\n * @return bool\n * @static\n */\n public static function currentRouteUses($action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteUses($action);\n }\n\n /**\n * Set the unmapped global resource parameters to singular.\n *\n * @param bool $singular\n * @return void\n * @static\n */\n public static function singularResourceParameters($singular = true)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->singularResourceParameters($singular);\n }\n\n /**\n * Set the global resource parameter mapping.\n *\n * @param array $parameters\n * @return void\n * @static\n */\n public static function resourceParameters($parameters = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->resourceParameters($parameters);\n }\n\n /**\n * Get or set the verbs used in the resource URIs.\n *\n * @param array $verbs\n * @return array|null\n * @static\n */\n public static function resourceVerbs($verbs = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resourceVerbs($verbs);\n }\n\n /**\n * Get the underlying route collection.\n *\n * @return \\Illuminate\\Routing\\RouteCollectionInterface\n * @static\n */\n public static function getRoutes()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getRoutes();\n }\n\n /**\n * Set the route collection instance.\n *\n * @param \\Illuminate\\Routing\\RouteCollection $routes\n * @return void\n * @static\n */\n public static function setRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->setRoutes($routes);\n }\n\n /**\n * Set the compiled route collection instance.\n *\n * @param array $routes\n * @return void\n * @static\n */\n public static function setCompiledRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->setCompiledRoutes($routes);\n }\n\n /**\n * Remove any duplicate middleware from the given array.\n *\n * @param array $middleware\n * @return array\n * @static\n */\n public static function uniqueMiddleware($middleware)\n {\n return \\Illuminate\\Routing\\Router::uniqueMiddleware($middleware);\n }\n\n /**\n * Set the container instance used by the router.\n *\n * @param \\Illuminate\\Container\\Container $container\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\Router::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\Router::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\Router::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\Router::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Call the given Closure with this instance then return the instance.\n *\n * @param (callable($this): mixed)|null $callback\n * @return ($callback is null ? \\Illuminate\\Support\\HigherOrderTapProxy : $this)\n * @static\n */\n public static function tap($callback = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->tap($callback);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::auth()\n * @param mixed $options\n * @static\n */\n public static function auth($options = [])\n {\n return \\Illuminate\\Routing\\Router::auth($options);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::resetPassword()\n * @static\n */\n public static function resetPassword()\n {\n return \\Illuminate\\Routing\\Router::resetPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::confirmPassword()\n * @static\n */\n public static function confirmPassword()\n {\n return \\Illuminate\\Routing\\Router::confirmPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::emailVerification()\n * @static\n */\n public static function emailVerification()\n {\n return \\Illuminate\\Routing\\Router::emailVerification();\n }\n\n }\n /**\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes withoutOverlapping(int $expiresAt = 1440)\n * @method static void mergeAttributes(\\Illuminate\\Console\\Scheduling\\Event $event)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes user(string $user)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes environments(mixed $environments)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes evenInMaintenanceMode()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes onOneServer()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes runInBackground()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes when(\\Closure|bool $callback)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes skip(\\Closure|bool $callback)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes name(string $description)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes description(string $description)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes cron(string $expression)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes between(string $startTime, string $endTime)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes unlessBetween(string $startTime, string $endTime)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everySecond()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFiveSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTenSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFifteenSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwentySeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThirtySeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyMinute()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThreeMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFourMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFiveMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTenMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFifteenMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThirtyMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes hourly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes hourlyAt(array|string|int|int[] $offset)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyOddHour(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThreeHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFourHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everySixHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes daily()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes at(string $time)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes dailyAt(string $time)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceDaily(int $first = 1, int $second = 13)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceDailyAt(int $first = 1, int $second = 13, int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekends()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes mondays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes tuesdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes wednesdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes thursdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes fridays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes saturdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes sundays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weeklyOn(mixed $dayOfWeek, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes monthly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes monthlyOn(int $dayOfMonth = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceMonthly(int $first = 1, int $second = 16, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes lastDayOfMonth(string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes quarterly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes quarterlyOn(int $dayOfQuarter = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes yearly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes yearlyOn(int $month = 1, int|string $dayOfMonth = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes days(mixed $days)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes timezone(\\UnitEnum|\\DateTimeZone|string $timezone)\n * @see \\Illuminate\\Console\\Scheduling\\Schedule\n */\n class Schedule {\n /**\n * Add a new callback event to the schedule.\n *\n * @param string|callable $callback\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\CallbackEvent\n * @static\n */\n public static function call($callback, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->call($callback, $parameters);\n }\n\n /**\n * Add a new Artisan command event to the schedule.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command|string $command\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\Event\n * @static\n */\n public static function command($command, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->command($command, $parameters);\n }\n\n /**\n * Add a new job callback event to the schedule.\n *\n * @param object|string $job\n * @param \\UnitEnum|string|null $queue\n * @param \\UnitEnum|string|null $connection\n * @return \\Illuminate\\Console\\Scheduling\\CallbackEvent\n * @static\n */\n public static function job($job, $queue = null, $connection = null)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->job($job, $queue, $connection);\n }\n\n /**\n * Add a new command event to the schedule.\n *\n * @param string $command\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\Event\n * @static\n */\n public static function exec($command, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->exec($command, $parameters);\n }\n\n /**\n * Create new schedule group.\n *\n * @param \\Illuminate\\Console\\Scheduling\\Event $event\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function group($events)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n $instance->group($events);\n }\n\n /**\n * Compile array input for a command.\n *\n * @param string|int $key\n * @param array $value\n * @return string\n * @static\n */\n public static function compileArrayInput($key, $value)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->compileArrayInput($key, $value);\n }\n\n /**\n * Determine if the server is allowed to run this event.\n *\n * @param \\Illuminate\\Console\\Scheduling\\Event $event\n * @param \\DateTimeInterface $time\n * @return bool\n * @static\n */\n public static function serverShouldRun($event, $time)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->serverShouldRun($event, $time);\n }\n\n /**\n * Get all of the events on the schedule that are due.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dueEvents($app)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->dueEvents($app);\n }\n\n /**\n * Get all of the events on the schedule.\n *\n * @return \\Illuminate\\Console\\Scheduling\\Event[]\n * @static\n */\n public static function events()\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->events();\n }\n\n /**\n * Specify the cache store that should be used to store mutexes.\n *\n * @param string $store\n * @return \\Illuminate\\Console\\Scheduling\\Schedule\n * @static\n */\n public static function useCache($store)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->useCache($store);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Console\\Scheduling\\Schedule::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Database\\Schema\\Builder\n */\n class Schema {\n /**\n * Drop all tables from the database.\n *\n * @return void\n * @static\n */\n public static function dropAllTables()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllTables();\n }\n\n /**\n * Drop all views from the database.\n *\n * @return void\n * @static\n */\n public static function dropAllViews()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllViews();\n }\n\n /**\n * Get the names of current schemas for the connection.\n *\n * @return string[]|null\n * @static\n */\n public static function getCurrentSchemaListing()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getCurrentSchemaListing();\n }\n\n /**\n * Set the default string length for migrations.\n *\n * @param int $length\n * @return void\n * @static\n */\n public static function defaultStringLength($length)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultStringLength($length);\n }\n\n /**\n * Set the default time precision for migrations.\n *\n * @static\n */\n public static function defaultTimePrecision($precision)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n return \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultTimePrecision($precision);\n }\n\n /**\n * Set the default morph key type for migrations.\n *\n * @param string $type\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function defaultMorphKeyType($type)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultMorphKeyType($type);\n }\n\n /**\n * Set the default morph key type for migrations to UUIDs.\n *\n * @return void\n * @static\n */\n public static function morphUsingUuids()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::morphUsingUuids();\n }\n\n /**\n * Set the default morph key type for migrations to ULIDs.\n *\n * @return void\n * @static\n */\n public static function morphUsingUlids()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::morphUsingUlids();\n }\n\n /**\n * Create a database in the schema.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function createDatabase($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->createDatabase($name);\n }\n\n /**\n * Drop a database from the schema if the database exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function dropDatabaseIfExists($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->dropDatabaseIfExists($name);\n }\n\n /**\n * Get the schemas that belong to the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, path: string|null, default: bool}>\n * @static\n */\n public static function getSchemas()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getSchemas();\n }\n\n /**\n * Determine if the given table exists.\n *\n * @param string $table\n * @return bool\n * @static\n */\n public static function hasTable($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasTable($table);\n }\n\n /**\n * Determine if the given view exists.\n *\n * @param string $view\n * @return bool\n * @static\n */\n public static function hasView($view)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasView($view);\n }\n\n /**\n * Get the tables that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string|null, schema_qualified_name: string, size: int|null, comment: string|null, collation: string|null, engine: string|null}>\n * @static\n */\n public static function getTables($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTables($schema);\n }\n\n /**\n * Get the names of the tables that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @param bool $schemaQualified\n * @return list<string>\n * @static\n */\n public static function getTableListing($schema = null, $schemaQualified = true)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTableListing($schema, $schemaQualified);\n }\n\n /**\n * Get the views that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string|null, schema_qualified_name: string, definition: string}>\n * @static\n */\n public static function getViews($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getViews($schema);\n }\n\n /**\n * Get the user-defined types that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string, type: string, type: string, category: string, implicit: bool}>\n * @static\n */\n public static function getTypes($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTypes($schema);\n }\n\n /**\n * Determine if the given table has a given column.\n *\n * @param string $table\n * @param string $column\n * @return bool\n * @static\n */\n public static function hasColumn($table, $column)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasColumn($table, $column);\n }\n\n /**\n * Determine if the given table has given columns.\n *\n * @param string $table\n * @param array<string> $columns\n * @return bool\n * @static\n */\n public static function hasColumns($table, $columns)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasColumns($table, $columns);\n }\n\n /**\n * Execute a table builder callback if the given table has a given column.\n *\n * @param string $table\n * @param string $column\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function whenTableHasColumn($table, $column, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->whenTableHasColumn($table, $column, $callback);\n }\n\n /**\n * Execute a table builder callback if the given table doesn't have a given column.\n *\n * @param string $table\n * @param string $column\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function whenTableDoesntHaveColumn($table, $column, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->whenTableDoesntHaveColumn($table, $column, $callback);\n }\n\n /**\n * Get the data type for the given column name.\n *\n * @param string $table\n * @param string $column\n * @param bool $fullDefinition\n * @return string\n * @static\n */\n public static function getColumnType($table, $column, $fullDefinition = false)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumnType($table, $column, $fullDefinition);\n }\n\n /**\n * Get the column listing for a given table.\n *\n * @param string $table\n * @return list<string>\n * @static\n */\n public static function getColumnListing($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumnListing($table);\n }\n\n /**\n * Get the columns for a given table.\n *\n * @param string $table\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, type: string, type_name: string, nullable: bool, default: mixed, auto_increment: bool, comment: string|null, generation: array{type: string, expression: string|null}|null}>\n * @static\n */\n public static function getColumns($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumns($table);\n }\n\n /**\n * Get the indexes for a given table.\n *\n * @param string $table\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, columns: list<string>, type: string, unique: bool, primary: bool}>\n * @static\n */\n public static function getIndexes($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getIndexes($table);\n }\n\n /**\n * Get the names of the indexes for a given table.\n *\n * @param string $table\n * @return list<string>\n * @static\n */\n public static function getIndexListing($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getIndexListing($table);\n }\n\n /**\n * Determine if the given table has a given index.\n *\n * @param string $table\n * @param string|array $index\n * @param string|null $type\n * @return bool\n * @static\n */\n public static function hasIndex($table, $index, $type = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasIndex($table, $index, $type);\n }\n\n /**\n * Get the foreign keys for a given table.\n *\n * @param string $table\n * @return array\n * @static\n */\n public static function getForeignKeys($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getForeignKeys($table);\n }\n\n /**\n * Modify a table on the schema.\n *\n * @param string $table\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function table($table, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->table($table, $callback);\n }\n\n /**\n * Create a new table on the schema.\n *\n * @param string $table\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function create($table, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->create($table, $callback);\n }\n\n /**\n * Drop a table from the schema.\n *\n * @param string $table\n * @return void\n * @static\n */\n public static function drop($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->drop($table);\n }\n\n /**\n * Drop a table from the schema if it exists.\n *\n * @param string $table\n * @return void\n * @static\n */\n public static function dropIfExists($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropIfExists($table);\n }\n\n /**\n * Drop columns from a table schema.\n *\n * @param string $table\n * @param string|array<string> $columns\n * @return void\n * @static\n */\n public static function dropColumns($table, $columns)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropColumns($table, $columns);\n }\n\n /**\n * Drop all types from the database.\n *\n * @return void\n * @throws \\LogicException\n * @static\n */\n public static function dropAllTypes()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllTypes();\n }\n\n /**\n * Rename a table on the schema.\n *\n * @param string $from\n * @param string $to\n * @return void\n * @static\n */\n public static function rename($from, $to)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->rename($from, $to);\n }\n\n /**\n * Enable foreign key constraints.\n *\n * @return bool\n * @static\n */\n public static function enableForeignKeyConstraints()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->enableForeignKeyConstraints();\n }\n\n /**\n * Disable foreign key constraints.\n *\n * @return bool\n * @static\n */\n public static function disableForeignKeyConstraints()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->disableForeignKeyConstraints();\n }\n\n /**\n * Disable foreign key constraints during the execution of a callback.\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutForeignKeyConstraints($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->withoutForeignKeyConstraints($callback);\n }\n\n /**\n * Get the default schema name for the connection.\n *\n * @return string|null\n * @static\n */\n public static function getCurrentSchemaName()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getCurrentSchemaName();\n }\n\n /**\n * Parse the given database object reference and extract the schema and table.\n *\n * @param string $reference\n * @param string|bool|null $withDefaultSchema\n * @return array\n * @static\n */\n public static function parseSchemaAndTable($reference, $withDefaultSchema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->parseSchemaAndTable($reference, $withDefaultSchema);\n }\n\n /**\n * Get the database connection instance.\n *\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function getConnection()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getConnection();\n }\n\n /**\n * Set the Schema Blueprint resolver callback.\n *\n * @param \\Closure(\\Illuminate\\Database\\Connection, string, \\Closure|null): \\Illuminate\\Database\\Schema\\Blueprint $resolver\n * @return void\n * @static\n */\n public static function blueprintResolver($resolver)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->blueprintResolver($resolver);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n return \\Illuminate\\Database\\Schema\\MariaDbBuilder::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Session\\SessionManager\n */\n class Session {\n /**\n * Determine if requests for the same session should wait for each to finish before executing.\n *\n * @return bool\n * @static\n */\n public static function shouldBlock()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->shouldBlock();\n }\n\n /**\n * Get the name of the cache store / driver that should be used to acquire session locks.\n *\n * @return string|null\n * @static\n */\n public static function blockDriver()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->blockDriver();\n }\n\n /**\n * Get the maximum number of seconds the session lock should be held for.\n *\n * @return int\n * @static\n */\n public static function defaultRouteBlockLockSeconds()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->defaultRouteBlockLockSeconds();\n }\n\n /**\n * Get the maximum number of seconds to wait while attempting to acquire a route block session lock.\n *\n * @return int\n * @static\n */\n public static function defaultRouteBlockWaitSeconds()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->defaultRouteBlockWaitSeconds();\n }\n\n /**\n * Get the session configuration.\n *\n * @return array\n * @static\n */\n public static function getSessionConfig()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getSessionConfig();\n }\n\n /**\n * Get the default session driver name.\n *\n * @return string|null\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default session driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->forgetDrivers();\n }\n\n /**\n * Start the session, reading the data from a handler.\n *\n * @return bool\n * @static\n */\n public static function start()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->start();\n }\n\n /**\n * Save the session data to storage.\n *\n * @return void\n * @static\n */\n public static function save()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->save();\n }\n\n /**\n * Age the flash data for the session.\n *\n * @return void\n * @static\n */\n public static function ageFlashData()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->ageFlashData();\n }\n\n /**\n * Get all of the session data.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->all();\n }\n\n /**\n * Get a subset of the session data.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->only($keys);\n }\n\n /**\n * Get all the session data except for a specified array of items.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->except($keys);\n }\n\n /**\n * Checks if a key exists.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function exists($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->exists($key);\n }\n\n /**\n * Determine if the given key is missing from the session data.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->missing($key);\n }\n\n /**\n * Determine if a key is present and not null.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if any of the given keys are present and not null.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function hasAny($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasAny($key);\n }\n\n /**\n * Get an item from the session.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get the value of a given key and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Determine if the session contains old input.\n *\n * @param string|null $key\n * @return bool\n * @static\n */\n public static function hasOldInput($key = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasOldInput($key);\n }\n\n /**\n * Get the requested item from the flashed input array.\n *\n * @param string|null $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getOldInput($key = null, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getOldInput($key, $default);\n }\n\n /**\n * Replace the given session attributes entirely.\n *\n * @param array $attributes\n * @return void\n * @static\n */\n public static function replace($attributes)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->replace($attributes);\n }\n\n /**\n * Put a key / value pair or array of key / value pairs in the session.\n *\n * @param string|array $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function put($key, $value = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->put($key, $value);\n }\n\n /**\n * Get an item from the session, or store the default value.\n *\n * @param string $key\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function remember($key, $callback)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->remember($key, $callback);\n }\n\n /**\n * Push a value onto a session array.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function push($key, $value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->push($key, $value);\n }\n\n /**\n * Increment the value of an item in the session.\n *\n * @param string $key\n * @param int $amount\n * @return mixed\n * @static\n */\n public static function increment($key, $amount = 1)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->increment($key, $amount);\n }\n\n /**\n * Decrement the value of an item in the session.\n *\n * @param string $key\n * @param int $amount\n * @return int\n * @static\n */\n public static function decrement($key, $amount = 1)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->decrement($key, $amount);\n }\n\n /**\n * Flash a key / value pair to the session.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function flash($key, $value = true)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flash($key, $value);\n }\n\n /**\n * Flash a key / value pair to the session for immediate use.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function now($key, $value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->now($key, $value);\n }\n\n /**\n * Reflash all of the session flash data.\n *\n * @return void\n * @static\n */\n public static function reflash()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->reflash();\n }\n\n /**\n * Reflash a subset of the current flash data.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function keep($keys = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->keep($keys);\n }\n\n /**\n * Flash an input array to the session.\n *\n * @param array $value\n * @return void\n * @static\n */\n public static function flashInput($value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flashInput($value);\n }\n\n /**\n * Get the session cache instance.\n *\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function cache()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->cache();\n }\n\n /**\n * Remove an item from the session, returning its value.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function remove($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->remove($key);\n }\n\n /**\n * Remove one or many items from the session.\n *\n * @param string|array $keys\n * @return void\n * @static\n */\n public static function forget($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->forget($keys);\n }\n\n /**\n * Remove all of the items from the session.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flush();\n }\n\n /**\n * Flush the session data and regenerate the ID.\n *\n * @return bool\n * @static\n */\n public static function invalidate()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->invalidate();\n }\n\n /**\n * Generate a new session identifier.\n *\n * @param bool $destroy\n * @return bool\n * @static\n */\n public static function regenerate($destroy = false)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->regenerate($destroy);\n }\n\n /**\n * Generate a new session ID for the session.\n *\n * @param bool $destroy\n * @return bool\n * @static\n */\n public static function migrate($destroy = false)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->migrate($destroy);\n }\n\n /**\n * Determine if the session has been started.\n *\n * @return bool\n * @static\n */\n public static function isStarted()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->isStarted();\n }\n\n /**\n * Get the name of the session.\n *\n * @return string\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getName();\n }\n\n /**\n * Set the name of the session.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setName($name)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setName($name);\n }\n\n /**\n * Get the current session ID.\n *\n * @return string\n * @static\n */\n public static function id()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->id();\n }\n\n /**\n * Get the current session ID.\n *\n * @return string\n * @static\n */\n public static function getId()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getId();\n }\n\n /**\n * Set the session ID.\n *\n * @param string|null $id\n * @return void\n * @static\n */\n public static function setId($id)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setId($id);\n }\n\n /**\n * Determine if this is a valid session ID.\n *\n * @param string|null $id\n * @return bool\n * @static\n */\n public static function isValidId($id)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->isValidId($id);\n }\n\n /**\n * Set the existence of the session on the handler if applicable.\n *\n * @param bool $value\n * @return void\n * @static\n */\n public static function setExists($value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setExists($value);\n }\n\n /**\n * Get the CSRF token value.\n *\n * @return string\n * @static\n */\n public static function token()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->token();\n }\n\n /**\n * Regenerate the CSRF token value.\n *\n * @return void\n * @static\n */\n public static function regenerateToken()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->regenerateToken();\n }\n\n /**\n * Determine if the previous URI is available.\n *\n * @return bool\n * @static\n */\n public static function hasPreviousUri()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasPreviousUri();\n }\n\n /**\n * Get the previous URL from the session as a URI instance.\n *\n * @return \\Illuminate\\Support\\Uri\n * @throws \\RuntimeException\n * @static\n */\n public static function previousUri()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->previousUri();\n }\n\n /**\n * Get the previous URL from the session.\n *\n * @return string|null\n * @static\n */\n public static function previousUrl()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->previousUrl();\n }\n\n /**\n * Set the \"previous\" URL in the session.\n *\n * @param string $url\n * @return void\n * @static\n */\n public static function setPreviousUrl($url)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setPreviousUrl($url);\n }\n\n /**\n * Specify that the user has confirmed their password.\n *\n * @return void\n * @static\n */\n public static function passwordConfirmed()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->passwordConfirmed();\n }\n\n /**\n * Get the underlying session handler implementation.\n *\n * @return \\SessionHandlerInterface\n * @static\n */\n public static function getHandler()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getHandler();\n }\n\n /**\n * Set the underlying session handler implementation.\n *\n * @param \\SessionHandlerInterface $handler\n * @return \\SessionHandlerInterface\n * @static\n */\n public static function setHandler($handler)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->setHandler($handler);\n }\n\n /**\n * Determine if the session handler needs a request.\n *\n * @return bool\n * @static\n */\n public static function handlerNeedsRequest()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->handlerNeedsRequest();\n }\n\n /**\n * Set the request on the handler instance.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function setRequestOnHandler($request)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setRequestOnHandler($request);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Session\\Store::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Session\\Store::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Session\\Store::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Session\\Store::flushMacros();\n }\n\n }\n /**\n * @method static bool has(string $location)\n * @method static string read(string $location)\n * @method static \\League\\Flysystem\\DirectoryListing listContents(string $location, bool $deep = false)\n * @method static int fileSize(string $path)\n * @method static string visibility(string $path)\n * @method static void write(string $location, string $contents, array $config = [])\n * @method static void createDirectory(string $location, array $config = [])\n * @see \\Illuminate\\Filesystem\\FilesystemManager\n */\n class Storage {\n /**\n * Get a filesystem instance.\n *\n * @param string|null $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function drive($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->drive($name);\n }\n\n /**\n * Get a filesystem instance.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function disk($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->disk($name);\n }\n\n /**\n * Get a default cloud filesystem instance.\n *\n * @return \\Illuminate\\Contracts\\Filesystem\\Cloud\n * @static\n */\n public static function cloud()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->cloud();\n }\n\n /**\n * Build an on-demand disk.\n *\n * @param string|array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create an instance of the local driver.\n *\n * @param array $config\n * @param string $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createLocalDriver($config, $name = 'local')\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createLocalDriver($config, $name);\n }\n\n /**\n * Create an instance of the ftp driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createFtpDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createFtpDriver($config);\n }\n\n /**\n * Create an instance of the sftp driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createSftpDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createSftpDriver($config);\n }\n\n /**\n * Create an instance of the Amazon S3 driver.\n *\n * @param array $config\n * @return \\Illuminate\\Contracts\\Filesystem\\Cloud\n * @static\n */\n public static function createS3Driver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createS3Driver($config);\n }\n\n /**\n * Create a scoped driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createScopedDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createScopedDriver($config);\n }\n\n /**\n * Set the given disk instance.\n *\n * @param string $name\n * @param mixed $disk\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function set($name, $disk)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->set($name, $disk);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Get the default cloud driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultCloudDriver()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->getDefaultCloudDriver();\n }\n\n /**\n * Unset the given disk instances.\n *\n * @param array|string $disk\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function forgetDisk($disk)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->forgetDisk($disk);\n }\n\n /**\n * Disconnect the given disk and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Determine if temporary URLs can be generated.\n *\n * @return bool\n * @static\n */\n public static function providesTemporaryUrls()\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->providesTemporaryUrls();\n }\n\n /**\n * Get a temporary URL for the file at the given path.\n *\n * @param string $path\n * @param \\DateTimeInterface $expiration\n * @param array $options\n * @return string\n * @static\n */\n public static function temporaryUrl($path, $expiration, $options = [])\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->temporaryUrl($path, $expiration, $options);\n }\n\n /**\n * Specify the name of the disk the adapter is managing.\n *\n * @param string $disk\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function diskName($disk)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->diskName($disk);\n }\n\n /**\n * Indicate that signed URLs should serve the corresponding files.\n *\n * @param bool $serve\n * @param \\Closure|null $urlGeneratorResolver\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function shouldServeSignedUrls($serve = true, $urlGeneratorResolver = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->shouldServeSignedUrls($serve, $urlGeneratorResolver);\n }\n\n /**\n * Assert that the given file or directory exists.\n *\n * @param string|array $path\n * @param string|null $content\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertExists($path, $content = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertExists($path, $content);\n }\n\n /**\n * Assert that the number of files in path equals the expected count.\n *\n * @param string $path\n * @param int $count\n * @param bool $recursive\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertCount($path, $count, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertCount($path, $count, $recursive);\n }\n\n /**\n * Assert that the given file or directory does not exist.\n *\n * @param string|array $path\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertMissing($path);\n }\n\n /**\n * Assert that the given directory is empty.\n *\n * @param string $path\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertDirectoryEmpty($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertDirectoryEmpty($path);\n }\n\n /**\n * Determine if a file or directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function exists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->exists($path);\n }\n\n /**\n * Determine if a file or directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function missing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->missing($path);\n }\n\n /**\n * Determine if a file exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function fileExists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->fileExists($path);\n }\n\n /**\n * Determine if a file is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function fileMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->fileMissing($path);\n }\n\n /**\n * Determine if a directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function directoryExists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directoryExists($path);\n }\n\n /**\n * Determine if a directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function directoryMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directoryMissing($path);\n }\n\n /**\n * Get the full path to the file that exists at the given relative path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function path($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->path($path);\n }\n\n /**\n * Get the contents of a file.\n *\n * @param string $path\n * @return string|null\n * @static\n */\n public static function get($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->get($path);\n }\n\n /**\n * Get the contents of a file as decoded JSON.\n *\n * @param string $path\n * @param int $flags\n * @return array|null\n * @static\n */\n public static function json($path, $flags = 0)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->json($path, $flags);\n }\n\n /**\n * Create a streamed response for a given file.\n *\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function response($path, $name = null, $headers = [], $disposition = 'inline')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->response($path, $name, $headers, $disposition);\n }\n\n /**\n * Create a streamed download response for a given file.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function serve($request, $path, $name = null, $headers = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->serve($request, $path, $name, $headers);\n }\n\n /**\n * Create a streamed download response for a given file.\n *\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function download($path, $name = null, $headers = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->download($path, $name, $headers);\n }\n\n /**\n * Write the contents of a file.\n *\n * @param string $path\n * @param \\Psr\\Http\\Message\\StreamInterface|\\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|resource $contents\n * @param mixed $options\n * @return string|bool\n * @static\n */\n public static function put($path, $contents, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->put($path, $contents, $options);\n }\n\n /**\n * Store the uploaded file on the disk.\n *\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string $path\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|array|null $file\n * @param mixed $options\n * @return string|false\n * @static\n */\n public static function putFile($path, $file = null, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->putFile($path, $file, $options);\n }\n\n /**\n * Store the uploaded file on the disk with a given name.\n *\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string $path\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|array|null $file\n * @param string|array|null $name\n * @param mixed $options\n * @return string|false\n * @static\n */\n public static function putFileAs($path, $file, $name = null, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->putFileAs($path, $file, $name, $options);\n }\n\n /**\n * Get the visibility for the given path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function getVisibility($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getVisibility($path);\n }\n\n /**\n * Set the visibility for the given path.\n *\n * @param string $path\n * @param string $visibility\n * @return bool\n * @static\n */\n public static function setVisibility($path, $visibility)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->setVisibility($path, $visibility);\n }\n\n /**\n * Prepend to a file.\n *\n * @param string $path\n * @param string $data\n * @param string $separator\n * @return bool\n * @static\n */\n public static function prepend($path, $data, $separator = '\n')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->prepend($path, $data, $separator);\n }\n\n /**\n * Append to a file.\n *\n * @param string $path\n * @param string $data\n * @param string $separator\n * @return bool\n * @static\n */\n public static function append($path, $data, $separator = '\n')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->append($path, $data, $separator);\n }\n\n /**\n * Delete the file at a given path.\n *\n * @param string|array $paths\n * @return bool\n * @static\n */\n public static function delete($paths)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->delete($paths);\n }\n\n /**\n * Copy a file to a new location.\n *\n * @param string $from\n * @param string $to\n * @return bool\n * @static\n */\n public static function copy($from, $to)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->copy($from, $to);\n }\n\n /**\n * Move a file to a new location.\n *\n * @param string $from\n * @param string $to\n * @return bool\n * @static\n */\n public static function move($from, $to)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->move($from, $to);\n }\n\n /**\n * Get the file size of a given file.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function size($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->size($path);\n }\n\n /**\n * Get the checksum for a file.\n *\n * @return string|false\n * @throws UnableToProvideChecksum\n * @static\n */\n public static function checksum($path, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->checksum($path, $options);\n }\n\n /**\n * Get the mime-type of a given file.\n *\n * @param string $path\n * @return string|false\n * @static\n */\n public static function mimeType($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->mimeType($path);\n }\n\n /**\n * Get the file's last modification time.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function lastModified($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->lastModified($path);\n }\n\n /**\n * Get a resource to read the file.\n *\n * @param string $path\n * @return resource|null The path resource or null on failure.\n * @static\n */\n public static function readStream($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->readStream($path);\n }\n\n /**\n * Write a new file using a stream.\n *\n * @param string $path\n * @param resource $resource\n * @param array $options\n * @return bool\n * @static\n */\n public static function writeStream($path, $resource, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->writeStream($path, $resource, $options);\n }\n\n /**\n * Get the URL for the file at the given path.\n *\n * @param string $path\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function url($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->url($path);\n }\n\n /**\n * Get a temporary upload URL for the file at the given path.\n *\n * @param string $path\n * @param \\DateTimeInterface $expiration\n * @param array $options\n * @return array\n * @throws \\RuntimeException\n * @static\n */\n public static function temporaryUploadUrl($path, $expiration, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->temporaryUploadUrl($path, $expiration, $options);\n }\n\n /**\n * Get an array of all files in a directory.\n *\n * @param string|null $directory\n * @param bool $recursive\n * @return array\n * @static\n */\n public static function files($directory = null, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->files($directory, $recursive);\n }\n\n /**\n * Get all of the files from the given directory (recursive).\n *\n * @param string|null $directory\n * @return array\n * @static\n */\n public static function allFiles($directory = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->allFiles($directory);\n }\n\n /**\n * Get all of the directories within a given directory.\n *\n * @param string|null $directory\n * @param bool $recursive\n * @return array\n * @static\n */\n public static function directories($directory = null, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directories($directory, $recursive);\n }\n\n /**\n * Get all the directories within a given directory (recursive).\n *\n * @param string|null $directory\n * @return array\n * @static\n */\n public static function allDirectories($directory = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->allDirectories($directory);\n }\n\n /**\n * Create a directory.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function makeDirectory($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->makeDirectory($path);\n }\n\n /**\n * Recursively delete a directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function deleteDirectory($directory)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->deleteDirectory($directory);\n }\n\n /**\n * Get the Flysystem driver.\n *\n * @return \\League\\Flysystem\\FilesystemOperator\n * @static\n */\n public static function getDriver()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getDriver();\n }\n\n /**\n * Get the Flysystem adapter.\n *\n * @return \\League\\Flysystem\\FilesystemAdapter\n * @static\n */\n public static function getAdapter()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getAdapter();\n }\n\n /**\n * Get the configuration values.\n *\n * @return array\n * @static\n */\n public static function getConfig()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getConfig();\n }\n\n /**\n * Define a custom callback that generates file download responses.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function serveUsing($callback)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n $instance->serveUsing($callback);\n }\n\n /**\n * Define a custom temporary URL builder callback.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function buildTemporaryUrlsUsing($callback)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n $instance->buildTemporaryUrlsUsing($callback);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n return \\Illuminate\\Filesystem\\LocalFilesystemAdapter::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\UrlGenerator\n */\n class URL {\n /**\n * Get the full URL for the current request.\n *\n * @return string\n * @static\n */\n public static function full()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->full();\n }\n\n /**\n * Get the current URL for the request.\n *\n * @return string\n * @static\n */\n public static function current()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->current();\n }\n\n /**\n * Get the URL for the previous request.\n *\n * @param mixed $fallback\n * @return string\n * @static\n */\n public static function previous($fallback = false)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->previous($fallback);\n }\n\n /**\n * Get the previous path info for the request.\n *\n * @param mixed $fallback\n * @return string\n * @static\n */\n public static function previousPath($fallback = false)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->previousPath($fallback);\n }\n\n /**\n * Generate an absolute URL to the given path.\n *\n * @param string $path\n * @param mixed $extra\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function to($path, $extra = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->to($path, $extra, $secure);\n }\n\n /**\n * Generate an absolute URL with the given query parameters.\n *\n * @param string $path\n * @param array $query\n * @param mixed $extra\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function query($path, $query = [], $extra = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->query($path, $query, $extra, $secure);\n }\n\n /**\n * Generate a secure, absolute URL to the given path.\n *\n * @param string $path\n * @param array $parameters\n * @return string\n * @static\n */\n public static function secure($path, $parameters = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->secure($path, $parameters);\n }\n\n /**\n * Generate the URL to an application asset.\n *\n * @param string $path\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function asset($path, $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->asset($path, $secure);\n }\n\n /**\n * Generate the URL to a secure asset.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function secureAsset($path)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->secureAsset($path);\n }\n\n /**\n * Generate the URL to an asset from a custom root domain such as CDN, etc.\n *\n * @param string $root\n * @param string $path\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function assetFrom($root, $path, $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->assetFrom($root, $path, $secure);\n }\n\n /**\n * Get the default scheme for a raw URL.\n *\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function formatScheme($secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatScheme($secure);\n }\n\n /**\n * Create a signed route URL for a named route.\n *\n * @param \\BackedEnum|string $name\n * @param mixed $parameters\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param bool $absolute\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function signedRoute($name, $parameters = [], $expiration = null, $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->signedRoute($name, $parameters, $expiration, $absolute);\n }\n\n /**\n * Create a temporary signed route URL for a named route.\n *\n * @param \\BackedEnum|string $name\n * @param \\DateTimeInterface|\\DateInterval|int $expiration\n * @param array $parameters\n * @param bool $absolute\n * @return string\n * @static\n */\n public static function temporarySignedRoute($name, $expiration, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->temporarySignedRoute($name, $expiration, $parameters, $absolute);\n }\n\n /**\n * Determine if the given request has a valid signature.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param bool $absolute\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasValidSignature($request, $absolute = true, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasValidSignature($request, $absolute, $ignoreQuery);\n }\n\n /**\n * Determine if the given request has a valid signature for a relative URL.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasValidRelativeSignature($request, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasValidRelativeSignature($request, $ignoreQuery);\n }\n\n /**\n * Determine if the signature from the given request matches the URL.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param bool $absolute\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasCorrectSignature($request, $absolute = true, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasCorrectSignature($request, $absolute, $ignoreQuery);\n }\n\n /**\n * Determine if the expires timestamp from the given request is not from the past.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return bool\n * @static\n */\n public static function signatureHasNotExpired($request)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->signatureHasNotExpired($request);\n }\n\n /**\n * Get the URL to a named route.\n *\n * @param \\BackedEnum|string $name\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\Symfony\\Component\\Routing\\Exception\\RouteNotFoundException|\\InvalidArgumentException\n * @static\n */\n public static function route($name, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->route($name, $parameters, $absolute);\n }\n\n /**\n * Get the URL for a given route instance.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\Illuminate\\Routing\\Exceptions\\UrlGenerationException\n * @static\n */\n public static function toRoute($route, $parameters, $absolute)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->toRoute($route, $parameters, $absolute);\n }\n\n /**\n * Get the URL to a controller action.\n *\n * @param string|array $action\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function action($action, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->action($action, $parameters, $absolute);\n }\n\n /**\n * Format the array of URL parameters.\n *\n * @param mixed $parameters\n * @return array\n * @static\n */\n public static function formatParameters($parameters)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatParameters($parameters);\n }\n\n /**\n * Get the base URL for the request.\n *\n * @param string $scheme\n * @param string|null $root\n * @return string\n * @static\n */\n public static function formatRoot($scheme, $root = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatRoot($scheme, $root);\n }\n\n /**\n * Format the given URL segments into a single URL.\n *\n * @param string $root\n * @param string $path\n * @param \\Illuminate\\Routing\\Route|null $route\n * @return string\n * @static\n */\n public static function format($root, $path, $route = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->format($root, $path, $route);\n }\n\n /**\n * Determine if the given path is a valid URL.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isValidUrl($path)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->isValidUrl($path);\n }\n\n /**\n * Set the default named parameters used by the URL generator.\n *\n * @param array $defaults\n * @return void\n * @static\n */\n public static function defaults($defaults)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->defaults($defaults);\n }\n\n /**\n * Get the default named parameters used by the URL generator.\n *\n * @return array\n * @static\n */\n public static function getDefaultParameters()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getDefaultParameters();\n }\n\n /**\n * Force the scheme for URLs.\n *\n * @param string|null $scheme\n * @return void\n * @static\n */\n public static function forceScheme($scheme)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceScheme($scheme);\n }\n\n /**\n * Force the use of the HTTPS scheme for all generated URLs.\n *\n * @param bool $force\n * @return void\n * @static\n */\n public static function forceHttps($force = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceHttps($force);\n }\n\n /**\n * Set the URL origin for all generated URLs.\n *\n * @param string|null $root\n * @return void\n * @static\n */\n public static function useOrigin($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->useOrigin($root);\n }\n\n /**\n * Set the forced root URL.\n *\n * @param string|null $root\n * @return void\n * @deprecated Use useOrigin\n * @static\n */\n public static function forceRootUrl($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceRootUrl($root);\n }\n\n /**\n * Set the URL origin for all generated asset URLs.\n *\n * @param string|null $root\n * @return void\n * @static\n */\n public static function useAssetOrigin($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->useAssetOrigin($root);\n }\n\n /**\n * Set a callback to be used to format the host of generated URLs.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function formatHostUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatHostUsing($callback);\n }\n\n /**\n * Set a callback to be used to format the path of generated URLs.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function formatPathUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatPathUsing($callback);\n }\n\n /**\n * Get the path formatter being used by the URL generator.\n *\n * @return \\Closure\n * @static\n */\n public static function pathFormatter()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->pathFormatter();\n }\n\n /**\n * Get the request instance.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function getRequest()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getRequest();\n }\n\n /**\n * Set the current request instance.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function setRequest($request)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->setRequest($request);\n }\n\n /**\n * Set the route collection.\n *\n * @param \\Illuminate\\Routing\\RouteCollectionInterface $routes\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setRoutes($routes);\n }\n\n /**\n * Set the session resolver for the generator.\n *\n * @param callable $sessionResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setSessionResolver($sessionResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setSessionResolver($sessionResolver);\n }\n\n /**\n * Set the encryption key resolver.\n *\n * @param callable $keyResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setKeyResolver($keyResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setKeyResolver($keyResolver);\n }\n\n /**\n * Clone a new instance of the URL generator with a different encryption key resolver.\n *\n * @param callable $keyResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function withKeyResolver($keyResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->withKeyResolver($keyResolver);\n }\n\n /**\n * Set the callback that should be used to attempt to resolve missing named routes.\n *\n * @param callable $missingNamedRouteResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function resolveMissingNamedRoutesUsing($missingNamedRouteResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->resolveMissingNamedRoutesUsing($missingNamedRouteResolver);\n }\n\n /**\n * Get the root controller namespace.\n *\n * @return string\n * @static\n */\n public static function getRootControllerNamespace()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getRootControllerNamespace();\n }\n\n /**\n * Set the root controller namespace.\n *\n * @param string $rootNamespace\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setRootControllerNamespace($rootNamespace)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setRootControllerNamespace($rootNamespace);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\UrlGenerator::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\UrlGenerator::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\UrlGenerator::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\UrlGenerator::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Validation\\Factory\n */\n class Validator {\n /**\n * Create a new Validator instance.\n *\n * @param array $data\n * @param array $rules\n * @param array $messages\n * @param array $attributes\n * @return \\Illuminate\\Validation\\Validator\n * @static\n */\n public static function make($data, $rules, $messages = [], $attributes = [])\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->make($data, $rules, $messages, $attributes);\n }\n\n /**\n * Validate the given data against the provided rules.\n *\n * @param array $data\n * @param array $rules\n * @param array $messages\n * @param array $attributes\n * @return array\n * @throws \\Illuminate\\Validation\\ValidationException\n * @static\n */\n public static function validate($data, $rules, $messages = [], $attributes = [])\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->validate($data, $rules, $messages, $attributes);\n }\n\n /**\n * Register a custom validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extend($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extend($rule, $extension, $message);\n }\n\n /**\n * Register a custom implicit validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extendImplicit($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extendImplicit($rule, $extension, $message);\n }\n\n /**\n * Register a custom dependent validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extendDependent($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extendDependent($rule, $extension, $message);\n }\n\n /**\n * Register a custom validator message replacer.\n *\n * @param string $rule\n * @param \\Closure|string $replacer\n * @return void\n * @static\n */\n public static function replacer($rule, $replacer)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->replacer($rule, $replacer);\n }\n\n /**\n * Indicate that unvalidated array keys should be included in validated data when the parent array is validated.\n *\n * @return void\n * @static\n */\n public static function includeUnvalidatedArrayKeys()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->includeUnvalidatedArrayKeys();\n }\n\n /**\n * Indicate that unvalidated array keys should be excluded from the validated data, even if the parent array was validated.\n *\n * @return void\n * @static\n */\n public static function excludeUnvalidatedArrayKeys()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->excludeUnvalidatedArrayKeys();\n }\n\n /**\n * Set the Validator instance resolver.\n *\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function resolver($resolver)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->resolver($resolver);\n }\n\n /**\n * Get the Translator implementation.\n *\n * @return \\Illuminate\\Contracts\\Translation\\Translator\n * @static\n */\n public static function getTranslator()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getTranslator();\n }\n\n /**\n * Get the Presence Verifier implementation.\n *\n * @return \\Illuminate\\Validation\\PresenceVerifierInterface\n * @static\n */\n public static function getPresenceVerifier()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getPresenceVerifier();\n }\n\n /**\n * Set the Presence Verifier implementation.\n *\n * @param \\Illuminate\\Validation\\PresenceVerifierInterface $presenceVerifier\n * @return void\n * @static\n */\n public static function setPresenceVerifier($presenceVerifier)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->setPresenceVerifier($presenceVerifier);\n }\n\n /**\n * Get the container instance used by the validation factory.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container|null\n * @static\n */\n public static function getContainer()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the validation factory.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Validation\\Factory\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->setContainer($container);\n }\n\n }\n /**\n * @see \\Illuminate\\View\\Factory\n */\n class View {\n /**\n * Get the evaluated view contents for the given view.\n *\n * @param string $path\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @static\n */\n public static function file($path, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->file($path, $data, $mergeData);\n }\n\n /**\n * Get the evaluated view contents for the given view.\n *\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @static\n */\n public static function make($view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->make($view, $data, $mergeData);\n }\n\n /**\n * Get the first view that actually exists from the given list.\n *\n * @param array $views\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function first($views, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->first($views, $data, $mergeData);\n }\n\n /**\n * Get the rendered content of the view based on a given condition.\n *\n * @param bool $condition\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return string\n * @static\n */\n public static function renderWhen($condition, $view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderWhen($condition, $view, $data, $mergeData);\n }\n\n /**\n * Get the rendered content of the view based on the negation of a given condition.\n *\n * @param bool $condition\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return string\n * @static\n */\n public static function renderUnless($condition, $view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderUnless($condition, $view, $data, $mergeData);\n }\n\n /**\n * Get the rendered contents of a partial from a loop.\n *\n * @param string $view\n * @param array $data\n * @param string $iterator\n * @param string $empty\n * @return string\n * @static\n */\n public static function renderEach($view, $data, $iterator, $empty = 'raw|')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderEach($view, $data, $iterator, $empty);\n }\n\n /**\n * Determine if a given view exists.\n *\n * @param string $view\n * @return bool\n * @static\n */\n public static function exists($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->exists($view);\n }\n\n /**\n * Get the appropriate view engine for the given path.\n *\n * @param string $path\n * @return \\Illuminate\\Contracts\\View\\Engine\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function getEngineFromPath($path)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getEngineFromPath($path);\n }\n\n /**\n * Add a piece of shared data to the environment.\n *\n * @param array|string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function share($key, $value = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->share($key, $value);\n }\n\n /**\n * Increment the rendering counter.\n *\n * @return void\n * @static\n */\n public static function incrementRender()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->incrementRender();\n }\n\n /**\n * Decrement the rendering counter.\n *\n * @return void\n * @static\n */\n public static function decrementRender()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->decrementRender();\n }\n\n /**\n * Check if there are no active render operations.\n *\n * @return bool\n * @static\n */\n public static function doneRendering()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->doneRendering();\n }\n\n /**\n * Determine if the given once token has been rendered.\n *\n * @param string $id\n * @return bool\n * @static\n */\n public static function hasRenderedOnce($id)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->hasRenderedOnce($id);\n }\n\n /**\n * Mark the given once token as having been rendered.\n *\n * @param string $id\n * @return void\n * @static\n */\n public static function markAsRenderedOnce($id)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->markAsRenderedOnce($id);\n }\n\n /**\n * Add a location to the array of view locations.\n *\n * @param string $location\n * @return void\n * @static\n */\n public static function addLocation($location)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addLocation($location);\n }\n\n /**\n * Prepend a location to the array of view locations.\n *\n * @param string $location\n * @return void\n * @static\n */\n public static function prependLocation($location)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->prependLocation($location);\n }\n\n /**\n * Add a new namespace to the loader.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function addNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->addNamespace($namespace, $hints);\n }\n\n /**\n * Prepend a new namespace to the loader.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function prependNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->prependNamespace($namespace, $hints);\n }\n\n /**\n * Replace the namespace hints for the given namespace.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function replaceNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->replaceNamespace($namespace, $hints);\n }\n\n /**\n * Register a valid view extension and its engine.\n *\n * @param string $extension\n * @param string $engine\n * @param \\Closure|null $resolver\n * @return void\n * @static\n */\n public static function addExtension($extension, $engine, $resolver = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addExtension($extension, $engine, $resolver);\n }\n\n /**\n * Flush all of the factory state like sections and stacks.\n *\n * @return void\n * @static\n */\n public static function flushState()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushState();\n }\n\n /**\n * Flush all of the section contents if done rendering.\n *\n * @return void\n * @static\n */\n public static function flushStateIfDoneRendering()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushStateIfDoneRendering();\n }\n\n /**\n * Get the extension to engine bindings.\n *\n * @return array\n * @static\n */\n public static function getExtensions()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getExtensions();\n }\n\n /**\n * Get the engine resolver instance.\n *\n * @return \\Illuminate\\View\\Engines\\EngineResolver\n * @static\n */\n public static function getEngineResolver()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getEngineResolver();\n }\n\n /**\n * Get the view finder instance.\n *\n * @return \\Illuminate\\View\\ViewFinderInterface\n * @static\n */\n public static function getFinder()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFinder();\n }\n\n /**\n * Set the view finder instance.\n *\n * @param \\Illuminate\\View\\ViewFinderInterface $finder\n * @return void\n * @static\n */\n public static function setFinder($finder)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setFinder($finder);\n }\n\n /**\n * Flush the cache of views located by the finder.\n *\n * @return void\n * @static\n */\n public static function flushFinderCache()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushFinderCache();\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setDispatcher($events)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setDispatcher($events);\n }\n\n /**\n * Get the IoC container instance.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the IoC container instance.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return void\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setContainer($container);\n }\n\n /**\n * Get an item from the shared data.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function shared($key, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->shared($key, $default);\n }\n\n /**\n * Get all of the shared data for the environment.\n *\n * @return array\n * @static\n */\n public static function getShared()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getShared();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\View\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\View\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\View\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\View\\Factory::flushMacros();\n }\n\n /**\n * Start a component rendering process.\n *\n * @param \\Illuminate\\Contracts\\View\\View|\\Illuminate\\Contracts\\Support\\Htmlable|\\Closure|string $view\n * @param array $data\n * @return void\n * @static\n */\n public static function startComponent($view, $data = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startComponent($view, $data);\n }\n\n /**\n * Get the first view that actually exists from the given list, and start a component.\n *\n * @param array $names\n * @param array $data\n * @return void\n * @static\n */\n public static function startComponentFirst($names, $data = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startComponentFirst($names, $data);\n }\n\n /**\n * Render the current component.\n *\n * @return string\n * @static\n */\n public static function renderComponent()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderComponent();\n }\n\n /**\n * Get an item from the component data that exists above the current component.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getConsumableComponentData($key, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getConsumableComponentData($key, $default);\n }\n\n /**\n * Start the slot rendering process.\n *\n * @param string $name\n * @param string|null $content\n * @param array $attributes\n * @return void\n * @static\n */\n public static function slot($name, $content = null, $attributes = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->slot($name, $content, $attributes);\n }\n\n /**\n * Save the slot content for rendering.\n *\n * @return void\n * @static\n */\n public static function endSlot()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->endSlot();\n }\n\n /**\n * Register a view creator event.\n *\n * @param array|string $views\n * @param \\Closure|string $callback\n * @return array\n * @static\n */\n public static function creator($views, $callback)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->creator($views, $callback);\n }\n\n /**\n * Register multiple view composers via an array.\n *\n * @param array $composers\n * @return array\n * @static\n */\n public static function composers($composers)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->composers($composers);\n }\n\n /**\n * Register a view composer event.\n *\n * @param array|string $views\n * @param \\Closure|string $callback\n * @return array\n * @static\n */\n public static function composer($views, $callback)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->composer($views, $callback);\n }\n\n /**\n * Call the composer for a given view.\n *\n * @param \\Illuminate\\Contracts\\View\\View $view\n * @return void\n * @static\n */\n public static function callComposer($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->callComposer($view);\n }\n\n /**\n * Call the creator for a given view.\n *\n * @param \\Illuminate\\Contracts\\View\\View $view\n * @return void\n * @static\n */\n public static function callCreator($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->callCreator($view);\n }\n\n /**\n * Start injecting content into a fragment.\n *\n * @param string $fragment\n * @return void\n * @static\n */\n public static function startFragment($fragment)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startFragment($fragment);\n }\n\n /**\n * Stop injecting content into a fragment.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopFragment()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopFragment();\n }\n\n /**\n * Get the contents of a fragment.\n *\n * @param string $name\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function getFragment($name, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFragment($name, $default);\n }\n\n /**\n * Get the entire array of rendered fragments.\n *\n * @return array\n * @static\n */\n public static function getFragments()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFragments();\n }\n\n /**\n * Flush all of the fragments.\n *\n * @return void\n * @static\n */\n public static function flushFragments()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushFragments();\n }\n\n /**\n * Start injecting content into a section.\n *\n * @param string $section\n * @param string|null $content\n * @return void\n * @static\n */\n public static function startSection($section, $content = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startSection($section, $content);\n }\n\n /**\n * Inject inline content into a section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function inject($section, $content)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->inject($section, $content);\n }\n\n /**\n * Stop injecting content into a section and return its contents.\n *\n * @return string\n * @static\n */\n public static function yieldSection()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldSection();\n }\n\n /**\n * Stop injecting content into a section.\n *\n * @param bool $overwrite\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopSection($overwrite = false)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopSection($overwrite);\n }\n\n /**\n * Stop injecting content into a section and append it.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function appendSection()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->appendSection();\n }\n\n /**\n * Get the string contents of a section.\n *\n * @param string $section\n * @param string $default\n * @return string\n * @static\n */\n public static function yieldContent($section, $default = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldContent($section, $default);\n }\n\n /**\n * Get the parent placeholder for the current request.\n *\n * @param string $section\n * @return string\n * @static\n */\n public static function parentPlaceholder($section = '')\n {\n return \\Illuminate\\View\\Factory::parentPlaceholder($section);\n }\n\n /**\n * Check if section exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasSection($name)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->hasSection($name);\n }\n\n /**\n * Check if section does not exist.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function sectionMissing($name)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->sectionMissing($name);\n }\n\n /**\n * Get the contents of a section.\n *\n * @param string $name\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function getSection($name, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getSection($name, $default);\n }\n\n /**\n * Get the entire array of sections.\n *\n * @return array\n * @static\n */\n public static function getSections()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getSections();\n }\n\n /**\n * Flush all of the sections.\n *\n * @return void\n * @static\n */\n public static function flushSections()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushSections();\n }\n\n /**\n * Add new loop to the stack.\n *\n * @param \\Countable|array $data\n * @return void\n * @static\n */\n public static function addLoop($data)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addLoop($data);\n }\n\n /**\n * Increment the top loop's indices.\n *\n * @return void\n * @static\n */\n public static function incrementLoopIndices()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->incrementLoopIndices();\n }\n\n /**\n * Pop a loop from the top of the loop stack.\n *\n * @return void\n * @static\n */\n public static function popLoop()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->popLoop();\n }\n\n /**\n * Get an instance of the last loop in the stack.\n *\n * @return \\stdClass|null\n * @static\n */\n public static function getLastLoop()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getLastLoop();\n }\n\n /**\n * Get the entire loop stack.\n *\n * @return array\n * @static\n */\n public static function getLoopStack()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getLoopStack();\n }\n\n /**\n * Start injecting content into a push section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function startPush($section, $content = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startPush($section, $content);\n }\n\n /**\n * Stop injecting content into a push section.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopPush()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopPush();\n }\n\n /**\n * Start prepending content into a push section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function startPrepend($section, $content = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startPrepend($section, $content);\n }\n\n /**\n * Stop prepending content into a push section.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopPrepend()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopPrepend();\n }\n\n /**\n * Get the string contents of a push section.\n *\n * @param string $section\n * @param string $default\n * @return string\n * @static\n */\n public static function yieldPushContent($section, $default = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldPushContent($section, $default);\n }\n\n /**\n * Flush all of the stacks.\n *\n * @return void\n * @static\n */\n public static function flushStacks()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushStacks();\n }\n\n /**\n * Start a translation block.\n *\n * @param array $replacements\n * @return void\n * @static\n */\n public static function startTranslation($replacements = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startTranslation($replacements);\n }\n\n /**\n * Render the current translation.\n *\n * @return string\n * @static\n */\n public static function renderTranslation()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderTranslation();\n }\n\n }\n /**\n * @see \\Illuminate\\Foundation\\Vite\n */\n class Vite {\n /**\n * Get the preloaded assets.\n *\n * @return array\n * @static\n */\n public static function preloadedAssets()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->preloadedAssets();\n }\n\n /**\n * Get the Content Security Policy nonce applied to all generated tags.\n *\n * @return string|null\n * @static\n */\n public static function cspNonce()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->cspNonce();\n }\n\n /**\n * Generate or set a Content Security Policy nonce to apply to all generated tags.\n *\n * @param string|null $nonce\n * @return string\n * @static\n */\n public static function useCspNonce($nonce = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useCspNonce($nonce);\n }\n\n /**\n * Use the given key to detect integrity hashes in the manifest.\n *\n * @param string|false $key\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useIntegrityKey($key)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useIntegrityKey($key);\n }\n\n /**\n * Set the Vite entry points.\n *\n * @param array $entryPoints\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function withEntryPoints($entryPoints)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->withEntryPoints($entryPoints);\n }\n\n /**\n * Merge additional Vite entry points with the current set.\n *\n * @param array $entryPoints\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function mergeEntryPoints($entryPoints)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->mergeEntryPoints($entryPoints);\n }\n\n /**\n * Set the filename for the manifest file.\n *\n * @param string $filename\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useManifestFilename($filename)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useManifestFilename($filename);\n }\n\n /**\n * Resolve asset paths using the provided resolver.\n *\n * @param callable|null $resolver\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function createAssetPathsUsing($resolver)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->createAssetPathsUsing($resolver);\n }\n\n /**\n * Get the Vite \"hot\" file path.\n *\n * @return string\n * @static\n */\n public static function hotFile()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->hotFile();\n }\n\n /**\n * Set the Vite \"hot\" file path.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useHotFile($path)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useHotFile($path);\n }\n\n /**\n * Set the Vite build directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useBuildDirectory($path)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useBuildDirectory($path);\n }\n\n /**\n * Use the given callback to resolve attributes for script tags.\n *\n * @param (callable(string, string, ?array, ?array): array)|array $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useScriptTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useScriptTagAttributes($attributes);\n }\n\n /**\n * Use the given callback to resolve attributes for style tags.\n *\n * @param (callable(string, string, ?array, ?array): array)|array $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useStyleTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useStyleTagAttributes($attributes);\n }\n\n /**\n * Use the given callback to resolve attributes for preload tags.\n *\n * @param (callable(string, string, ?array, ?array): (array|false))|array|false $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function usePreloadTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->usePreloadTagAttributes($attributes);\n }\n\n /**\n * Eagerly prefetch assets.\n *\n * @param int|null $concurrency\n * @param string $event\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function prefetch($concurrency = null, $event = 'load')\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->prefetch($concurrency, $event);\n }\n\n /**\n * Use the \"waterfall\" prefetching strategy.\n *\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useWaterfallPrefetching($concurrency = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useWaterfallPrefetching($concurrency);\n }\n\n /**\n * Use the \"aggressive\" prefetching strategy.\n *\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useAggressivePrefetching()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useAggressivePrefetching();\n }\n\n /**\n * Set the prefetching strategy.\n *\n * @param 'waterfall'|'aggressive'|null $strategy\n * @param array $config\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function usePrefetchStrategy($strategy, $config = [])\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->usePrefetchStrategy($strategy, $config);\n }\n\n /**\n * Generate React refresh runtime script.\n *\n * @return \\Illuminate\\Support\\HtmlString|void\n * @static\n */\n public static function reactRefresh()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->reactRefresh();\n }\n\n /**\n * Get the URL for an asset.\n *\n * @param string $asset\n * @param string|null $buildDirectory\n * @return string\n * @static\n */\n public static function asset($asset, $buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->asset($asset, $buildDirectory);\n }\n\n /**\n * Get the content of a given asset.\n *\n * @param string $asset\n * @param string|null $buildDirectory\n * @return string\n * @throws \\Illuminate\\Foundation\\ViteException\n * @static\n */\n public static function content($asset, $buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->content($asset, $buildDirectory);\n }\n\n /**\n * Get a unique hash representing the current manifest, or null if there is no manifest.\n *\n * @param string|null $buildDirectory\n * @return string|null\n * @static\n */\n public static function manifestHash($buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->manifestHash($buildDirectory);\n }\n\n /**\n * Determine if the HMR server is running.\n *\n * @return bool\n * @static\n */\n public static function isRunningHot()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->isRunningHot();\n }\n\n /**\n * Get the Vite tag content as a string of HTML.\n *\n * @return string\n * @static\n */\n public static function toHtml()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->toHtml();\n }\n\n /**\n * Flush state.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n $instance->flush();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Foundation\\Vite::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Foundation\\Vite::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Foundation\\Vite::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Foundation\\Vite::flushMacros();\n }\n\n }\n /**\n * @method static void createSubscription(array|string $channels, \\Closure $callback, string $method = 'subscribe')\n * @method static \\Illuminate\\Redis\\Limiters\\ConcurrencyLimiterBuilder funnel(string $name)\n * @method static \\Illuminate\\Redis\\Limiters\\DurationLimiterBuilder throttle(string $name)\n * @method static mixed client()\n * @method static void subscribe(array|string $channels, \\Closure $callback)\n * @method static void psubscribe(array|string $channels, \\Closure $callback)\n * @method static mixed command(string $method, array $parameters = [])\n * @method static void listen(\\Closure $callback)\n * @method static string|null getName()\n * @method static \\Illuminate\\Redis\\Connections\\Connection setName(string $name)\n * @method static \\Illuminate\\Contracts\\Events\\Dispatcher getEventDispatcher()\n * @method static void setEventDispatcher(\\Illuminate\\Contracts\\Events\\Dispatcher $events)\n * @method static void unsetEventDispatcher()\n * @method static void macro(string $name, object|callable $macro)\n * @method static void mixin(object $mixin, bool $replace = true)\n * @method static bool hasMacro(string $name)\n * @method static void flushMacros()\n * @method static mixed macroCall(string $method, array $parameters)\n * @see \\Illuminate\\Redis\\RedisManager\n */\n class Redis {\n /**\n * Get a Redis connection by name.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Resolve the given connection by name.\n *\n * @param string|null $name\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function resolve($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->resolve($name);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array\n * @static\n */\n public static function connections()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->connections();\n }\n\n /**\n * Enable the firing of Redis command events.\n *\n * @return void\n * @static\n */\n public static function enableEvents()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->enableEvents();\n }\n\n /**\n * Disable the firing of Redis command events.\n *\n * @return void\n * @static\n */\n public static function disableEvents()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->disableEvents();\n }\n\n /**\n * Set the default driver.\n *\n * @param string $driver\n * @return void\n * @static\n */\n public static function setDriver($driver)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->setDriver($driver);\n }\n\n /**\n * Disconnect the given connection and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Redis\\RedisManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n }\n }\n\nnamespace Aws\\Laravel {\n /**\n * Facade for the AWS service\n *\n */\n class AwsFacade {\n /**\n * Get a client by name using an array of constructor options.\n *\n * @param string $name Service name or namespace (e.g., DynamoDb, s3).\n * @param array $args Arguments to configure the client.\n * @return \\Aws\\AwsClientInterface\n * @throws \\InvalidArgumentException if any required options are missing or\n * the service is not supported.\n * @see Aws\\AwsClient::__construct for a list of available options for args.\n * @static\n */\n public static function createClient($name, $args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->createClient($name, $args);\n }\n\n /**\n * @static\n */\n public static function createMultiRegionClient($name, $args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->createMultiRegionClient($name, $args);\n }\n\n /**\n * Clone existing SDK instance with ability to pass an associative array\n * of extra client settings.\n *\n * @param array $args\n * @return self\n * @static\n */\n public static function copy($args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->copy($args);\n }\n\n /**\n * Determine the endpoint prefix from a client namespace.\n *\n * @param string $name Namespace name\n * @return string\n * @internal\n * @deprecated Use the `\\Aws\\manifest()` function instead.\n * @static\n */\n public static function getEndpointPrefix($name)\n {\n return \\Aws\\Sdk::getEndpointPrefix($name);\n }\n\n }\n }\n\nnamespace Laravolt\\Avatar {\n /**\n */\n class Facade {\n /**\n * @static\n */\n public static function setGenerator($generator)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setGenerator($generator);\n }\n\n /**\n * @static\n */\n public static function create($name)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->create($name);\n }\n\n /**\n * @static\n */\n public static function applyTheme($config)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->applyTheme($config);\n }\n\n /**\n * @static\n */\n public static function addTheme($name, $config)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->addTheme($name, $config);\n }\n\n /**\n * @static\n */\n public static function toBase64()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toBase64();\n }\n\n /**\n * @static\n */\n public static function save($path, $quality = 90)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->save($path, $quality);\n }\n\n /**\n * @static\n */\n public static function toSvg()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toSvg();\n }\n\n /**\n * @static\n */\n public static function toGravatar($param = null)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toGravatar($param);\n }\n\n /**\n * @static\n */\n public static function getInitial()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getInitial();\n }\n\n /**\n * @static\n */\n public static function getImageObject()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getImageObject();\n }\n\n /**\n * @static\n */\n public static function buildAvatar()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->buildAvatar();\n }\n\n /**\n * @static\n */\n public static function getAttribute($key)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getAttribute($key);\n }\n\n /**\n * Get background color\n *\n * @static\n */\n public static function getBackground()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getBackground();\n }\n\n /**\n * Get foreground color\n *\n * @static\n */\n public static function getForeground()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getForeground();\n }\n\n /**\n * Get shape\n *\n * @static\n */\n public static function getShape()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getShape();\n }\n\n /**\n * @static\n */\n public static function setTheme($theme)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setTheme($theme);\n }\n\n /**\n * @static\n */\n public static function setBackground($hex)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBackground($hex);\n }\n\n /**\n * @static\n */\n public static function setForeground($hex)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setForeground($hex);\n }\n\n /**\n * @static\n */\n public static function setDimension($width, $height = null)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setDimension($width, $height);\n }\n\n /**\n * @static\n */\n public static function setResponsive($responsive)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setResponsive($responsive);\n }\n\n /**\n * @static\n */\n public static function setFontSize($size)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFontSize($size);\n }\n\n /**\n * @static\n */\n public static function setFontFamily($font)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFontFamily($font);\n }\n\n /**\n * @static\n */\n public static function setBorder($size, $color, $radius = 0)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBorder($size, $color, $radius);\n }\n\n /**\n * @static\n */\n public static function setBorderRadius($radius)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBorderRadius($radius);\n }\n\n /**\n * @static\n */\n public static function setShape($shape)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setShape($shape);\n }\n\n /**\n * @static\n */\n public static function setChars($chars)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setChars($chars);\n }\n\n /**\n * @static\n */\n public static function setFont($font)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFont($font);\n }\n\n }\n }\n\nnamespace Spatie\\Fractal\\Facades {\n /**\n * @see \\Spatie\\Fractal\\Fractal\n */\n class Fractal extends \\Spatie\\Fractalistic\\Fractal {\n /**\n * @param null|mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|\\League\\Fractal\\Serializer\\SerializerAbstract $serializer\n * @return static\n * @static\n */\n public static function create($data = null, $transformer = null, $serializer = null)\n {\n return \\Spatie\\Fractal\\Fractal::create($data, $transformer, $serializer);\n }\n\n /**\n * @static\n */\n public static function respond($statusCode = 200, $headers = [], $options = 0)\n {\n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->respond($statusCode, $headers, $options);\n }\n\n /**\n * Set the collection data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function collection($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->collection($data, $transformer, $resourceName);\n }\n\n /**\n * Set the item data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function item($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->item($data, $transformer, $resourceName);\n }\n\n /**\n * Set the primitive data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function primitive($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->primitive($data, $transformer, $resourceName);\n }\n\n /**\n * Set the data that must be transformed.\n *\n * @param string $dataType\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function data($dataType, $data, $transformer = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->data($dataType, $data, $transformer);\n }\n\n /**\n * Set the class or function that will perform the transform.\n *\n * @param string|callable|\\League\\Fractal\\TransformerAbstract|null $transformer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function transformWith($transformer)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->transformWith($transformer);\n }\n\n /**\n * Set the serializer to be used.\n *\n * @param string|\\League\\Fractal\\Serializer\\SerializerAbstract $serializer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function serializeWith($serializer)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->serializeWith($serializer);\n }\n\n /**\n * Set a Fractal paginator for the data.\n *\n * @param \\League\\Fractal\\Pagination\\PaginatorInterface $paginator\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function paginateWith($paginator)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->paginateWith($paginator);\n }\n\n /**\n * Set a Fractal cursor for the data.\n *\n * @param \\League\\Fractal\\Pagination\\CursorInterface $cursor\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function withCursor($cursor)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->withCursor($cursor);\n }\n\n /**\n * Specify the includes.\n *\n * @param array|string $includes Array or string of resources to include.\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseIncludes($includes)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseIncludes($includes);\n }\n\n /**\n * Specify the excludes.\n *\n * @param array|string $excludes Array or string of resources to exclude.\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseExcludes($excludes)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseExcludes($excludes);\n }\n\n /**\n * Specify the fieldsets to include in the response.\n *\n * @param array $fieldsets array with key = resourceName and value = fields to include\n * (array or comma separated string with field names)\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseFieldsets($fieldsets)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseFieldsets($fieldsets);\n }\n\n /**\n * Set the meta data.\n *\n * @param $array,...\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function addMeta()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->addMeta();\n }\n\n /**\n * Set the resource name, to replace 'data' as the root of the collection or item.\n *\n * @param string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function withResourceName($resourceName)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->withResourceName($resourceName);\n }\n\n /**\n * Upper limit to how many levels of included data are allowed.\n *\n * @param int $recursionLimit\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function limitRecursion($recursionLimit)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->limitRecursion($recursionLimit);\n }\n\n /**\n * Perform the transformation to json.\n *\n * @param int $options\n * @return string\n * @static\n */\n public static function toJson($options = 0)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->toJson($options);\n }\n\n /**\n * Perform the transformation to array.\n *\n * @return array|null\n * @static\n */\n public static function toArray()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->toArray();\n }\n\n /**\n * Create fractal data.\n *\n * @return \\League\\Fractal\\Scope\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @throws \\Spatie\\Fractalistic\\Exceptions\\NoTransformerSpecified\n * @static\n */\n public static function createData()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->createData();\n }\n\n /**\n * Get the resource class.\n *\n * @return string\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @static\n */\n public static function getResourceClass()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResourceClass();\n }\n\n /**\n * Get the resource.\n *\n * @return \\League\\Fractal\\Resource\\ResourceInterface\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @static\n */\n public static function getResource()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResource();\n }\n\n /**\n * Return the name of the resource.\n *\n * @return string|null\n * @static\n */\n public static function getResourceName()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResourceName();\n }\n\n /**\n * Convert the object into something JSON serializable.\n *\n * @return array|null\n * @static\n */\n public static function jsonSerialize()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->jsonSerialize();\n }\n\n /**\n * Get the transformer.\n *\n * @return string|callable|\\League\\Fractal\\TransformerAbstract|null\n * @static\n */\n public static function getTransformer()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getTransformer();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Spatie\\Fractal\\Fractal::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Spatie\\Fractal\\Fractal::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Spatie\\Fractal\\Fractal::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Spatie\\Fractal\\Fractal::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n }\n\nnamespace Laratrust {\n /**\n */\n class LaratrustFacade {\n /**\n * Checks if the current user has a role by its name.\n *\n * @static\n */\n public static function hasRole($role, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->hasRole($role, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a permission by its name.\n *\n * @static\n */\n public static function hasPermission($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->hasPermission($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user does not have a permission by its name.\n *\n * @static\n */\n public static function doesntHavePermission($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->doesntHavePermission($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a permission by its name.\n * \n * Alias to hasPermission.\n *\n * @static\n */\n public static function isAbleTo($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->isAbleTo($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user does not have a permission by its name.\n * \n * Alias to doesntHavePermission.\n *\n * @static\n */\n public static function isNotAbleTo($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->isNotAbleTo($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a role or permission by its name.\n *\n * @param array|string $roles The role(s) needed.\n * @param array|string $permissions The permission(s) needed.\n * @param array $options The Options.\n * @return bool\n * @static\n */\n public static function ability($roles, $permissions, $team = null, $options = [])\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->ability($roles, $permissions, $team, $options);\n }\n\n }\n }\n\nnamespace Sentry\\Laravel {\n /**\n * @see \\Sentry\\State\\HubInterface\n */\n class Facade {\n /**\n * Gets the client bound to the top of the stack.\n *\n * @static\n */\n public static function getClient()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getClient();\n }\n\n /**\n * Gets the ID of the last captured event.\n *\n * @static\n */\n public static function getLastEventId()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getLastEventId();\n }\n\n /**\n * Creates a new scope to store context information that will be layered on\n * top of the current one. It is isolated, i.e. all breadcrumbs and context\n * information added to this scope will be removed once the scope ends. Be\n * sure to always remove this scope with {@see Hub::popScope} when the\n * operation finishes or throws.\n *\n * @static\n */\n public static function pushScope()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->pushScope();\n }\n\n /**\n * Removes a previously pushed scope from the stack. This restores the state\n * before the scope was pushed. All breadcrumbs and context information added\n * since the last call to {@see Hub::pushScope} are discarded.\n *\n * @static\n */\n public static function popScope()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->popScope();\n }\n\n /**\n * Creates a new scope with and executes the given operation within. The scope\n * is automatically removed once the operation finishes or throws.\n *\n * @param callable $callback The callback to be executed\n * @return mixed|void The callback's return value, upon successful execution\n * @psalm-template T\n * @psalm-param callable(Scope): T $callback\n * @psalm-return T\n * @static\n */\n public static function withScope($callback)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->withScope($callback);\n }\n\n /**\n * Calls the given callback passing to it the current scope so that any\n * operation can be run within its context.\n *\n * @static\n */\n public static function configureScope($callback)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->configureScope($callback);\n }\n\n /**\n * Binds the given client to the current scope.\n *\n * @static\n */\n public static function bindClient($client)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->bindClient($client);\n }\n\n /**\n * Captures a message event and sends it to Sentry.\n *\n * @static\n */\n public static function captureMessage($message, $level = null, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureMessage($message, $level, $hint);\n }\n\n /**\n * Captures an exception event and sends it to Sentry.\n *\n * @static\n */\n public static function captureException($exception, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureException($exception, $hint);\n }\n\n /**\n * Captures a new event using the provided data.\n *\n * @static\n */\n public static function captureEvent($event, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureEvent($event, $hint);\n }\n\n /**\n * Captures an event that logs the last occurred error.\n *\n * @static\n */\n public static function captureLastError($hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureLastError($hint);\n }\n\n /**\n * Captures a check-in.\n *\n * @param int|float|null $duration\n * @param int|float|null $duration\n * @static\n */\n public static function captureCheckIn($slug, $status, $duration = null, $monitorConfig = null, $checkInId = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureCheckIn($slug, $status, $duration, $monitorConfig, $checkInId);\n }\n\n /**\n * Records a new breadcrumb which will be attached to future events. They\n * will be added to subsequent events to provide more context on user's\n * actions prior to an error or crash.\n *\n * @static\n */\n public static function addBreadcrumb($breadcrumb)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->addBreadcrumb($breadcrumb);\n }\n\n /**\n * Gets the integration whose FQCN matches the given one if it's available on the current client.\n *\n * @param string $className The FQCN of the integration\n * @psalm-template T of IntegrationInterface\n * @psalm-param class-string<T> $className\n * @psalm-return T|null\n * @static\n */\n public static function getIntegration($className)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getIntegration($className);\n }\n\n /**\n * Starts a new `Transaction` and returns it. This is the entry point to manual\n * tracing instrumentation.\n * \n * A tree structure can be built by adding child spans to the transaction, and\n * child spans to other spans. To start a new child span within the transaction\n * or any span, call the respective `startChild()` method.\n * \n * Every child span must be finished before the transaction is finished,\n * otherwise the unfinished spans are discarded.\n * \n * The transaction must be finished with a call to its `finish()` method, at\n * which point the transaction with all its finished child spans will be sent to\n * Sentry.\n *\n * @param array<string, mixed> $customSamplingContext Additional context that will be passed to the {@see SamplingContext}\n * @param array<string, mixed> $customSamplingContext Additional context that will be passed to the {@see SamplingContext}\n * @static\n */\n public static function startTransaction($context, $customSamplingContext = [])\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->startTransaction($context, $customSamplingContext);\n }\n\n /**\n * Returns the transaction that is on the Hub.\n *\n * @static\n */\n public static function getTransaction()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getTransaction();\n }\n\n /**\n * Sets the span on the Hub.\n *\n * @static\n */\n public static function setSpan($span)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->setSpan($span);\n }\n\n /**\n * Returns the span that is on the Hub.\n *\n * @static\n */\n public static function getSpan()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getSpan();\n }\n\n }\n }\n\nnamespace League\\StatsD\\Laravel5\\Facade {\n /**\n * Facade for Statsd Package\n *\n * @author Aran Wilkinson <aran@aranw.net>\n * @package League\\StatsD\\Laravel5\\Facade\n */\n class StatsdFacade {\n /**\n * Singleton Reference\n *\n * @static\n */\n public static function instance($name = 'default')\n {\n return \\League\\StatsD\\Client::instance($name);\n }\n\n /**\n * Initialize Connection Details\n *\n * @param array $options Configuration options\n * @return \\League\\StatsD\\Client This instance\n * @throws ConfigurationException If port is invalid\n * @static\n */\n public static function configure($options = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->configure($options);\n }\n\n /**\n * @static\n */\n public static function getHost()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getHost();\n }\n\n /**\n * @static\n */\n public static function getPort()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getPort();\n }\n\n /**\n * @static\n */\n public static function getNamespace()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getNamespace();\n }\n\n /**\n * Get Last message sent to server\n *\n * @static\n */\n public static function getLastMessage()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getLastMessage();\n }\n\n /**\n * Increment a metric\n *\n * @param string|array $metrics Metric(s) to increment\n * @param int $delta Value to decrement the metric by\n * @param float $sampleRate Sample rate of metric\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function increment($metrics, $delta = 1, $sampleRate = 1.0, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->increment($metrics, $delta, $sampleRate, $tags);\n }\n\n /**\n * Decrement a metric\n *\n * @param string|array $metrics Metric(s) to decrement\n * @param int $delta Value to increment the metric by\n * @param float $sampleRate Sample rate of metric\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function decrement($metrics, $delta = 1, $sampleRate = 1.0, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->decrement($metrics, $delta, $sampleRate, $tags);\n }\n\n /**\n * Start timing the given metric\n *\n * @param string $metric Metric to time\n * @static\n */\n public static function startTiming($metric)\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->startTiming($metric);\n }\n\n /**\n * End timing the given metric and record\n *\n * @param string $metric Metric to time\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function endTiming($metric, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->endTiming($metric, $tags);\n }\n\n /**\n * Timing\n *\n * @param string $metric Metric to track\n * @param float $time Time in milliseconds\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function timing($metric, $time, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->timing($metric, $time, $tags);\n }\n\n /**\n * Send multiple timing metrics at once\n *\n * @param array $metrics key value map of metric name -> timing value\n * @throws ConnectionException\n * @static\n */\n public static function timings($metrics)\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->timings($metrics);\n }\n\n /**\n * Time a function\n *\n * @param string $metric Metric to time\n * @param callable $func Function to record\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function time($metric, $func, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->time($metric, $func, $tags);\n }\n\n /**\n * Gauges\n *\n * @param string $metric Metric to gauge\n * @param int|float $value Set the value of the gauge\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function gauge($metric, $value, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->gauge($metric, $value, $tags);\n }\n\n /**\n * Sets - count the number of unique values passed to a key\n *\n * @param string $metric\n * @param mixed $value\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function set($metric, $value, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->set($metric, $value, $tags);\n }\n\n }\n }\n\nnamespace Barryvdh\\Debugbar\\Facades {\n /**\n * @method static void alert(mixed $message)\n * @method static void critical(mixed $message)\n * @method static void debug(mixed $message)\n * @method static void emergency(mixed $message)\n * @method static void error(mixed $message)\n * @method static void info(mixed $message)\n * @method static void log(mixed $message)\n * @method static void notice(mixed $message)\n * @method static void warning(mixed $message)\n * @see \\Barryvdh\\Debugbar\\LaravelDebugbar\n */\n class Debugbar extends \\DebugBar\\DebugBar {\n /**\n * Returns the HTTP driver\n * \n * If no http driver where defined, a PhpHttpDriver is automatically created\n *\n * @return \\DebugBar\\HttpDriverInterface\n * @static\n */\n public static function getHttpDriver()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getHttpDriver();\n }\n\n /**\n * Enable the Debugbar and boot, if not already booted.\n *\n * @static\n */\n public static function enable()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->enable();\n }\n\n /**\n * Boot the debugbar (add collectors, renderer and listener)\n *\n * @static\n */\n public static function boot()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->boot();\n }\n\n /**\n * @static\n */\n public static function shouldCollect($name, $default = false)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->shouldCollect($name, $default);\n }\n\n /**\n * Adds a data collector\n *\n * @param \\DebugBar\\DataCollector\\DataCollectorInterface $collector\n * @throws DebugBarException\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function addCollector($collector)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addCollector($collector);\n }\n\n /**\n * Handle silenced errors\n *\n * @param $level\n * @param $message\n * @param string $file\n * @param int $line\n * @param array $context\n * @throws \\ErrorException\n * @static\n */\n public static function handleError($level, $message, $file = '', $line = 0, $context = [])\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->handleError($level, $message, $file, $line, $context);\n }\n\n /**\n * Starts a measure\n *\n * @param string $name Internal name, used to stop the measure\n * @param string $label Public name\n * @param string|null $collector\n * @param string|null $group\n * @static\n */\n public static function startMeasure($name, $label = null, $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->startMeasure($name, $label, $collector, $group);\n }\n\n /**\n * Stops a measure\n *\n * @param string $name\n * @static\n */\n public static function stopMeasure($name)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->stopMeasure($name);\n }\n\n /**\n * Adds an exception to be profiled in the debug bar\n *\n * @param \\Exception $e\n * @deprecated in favor of addThrowable\n * @static\n */\n public static function addException($e)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addException($e);\n }\n\n /**\n * Adds an exception to be profiled in the debug bar\n *\n * @param \\Throwable $e\n * @static\n */\n public static function addThrowable($e)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addThrowable($e);\n }\n\n /**\n * Returns a JavascriptRenderer for this instance\n *\n * @param string $baseUrl\n * @param string $basePath\n * @return \\Barryvdh\\Debugbar\\JavascriptRenderer\n * @static\n */\n public static function getJavascriptRenderer($baseUrl = null, $basePath = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getJavascriptRenderer($baseUrl, $basePath);\n }\n\n /**\n * Modify the response and inject the debugbar (or data in headers)\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param \\Symfony\\Component\\HttpFoundation\\Response $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function modifyResponse($request, $response)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->modifyResponse($request, $response);\n }\n\n /**\n * Check if the Debugbar is enabled\n *\n * @return boolean\n * @static\n */\n public static function isEnabled()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isEnabled();\n }\n\n /**\n * Collects the data from the collectors\n *\n * @return array\n * @static\n */\n public static function collect()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->collect();\n }\n\n /**\n * Injects the web debug toolbar into the given Response.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Response $response A Response instance\n * Based on https://github.com/symfony/WebProfilerBundle/blob/master/EventListener/WebDebugToolbarListener.php\n * @static\n */\n public static function injectDebugbar($response)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->injectDebugbar($response);\n }\n\n /**\n * Checks if there is stacked data in the session\n *\n * @return boolean\n * @static\n */\n public static function hasStackedData()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->hasStackedData();\n }\n\n /**\n * Returns the data stacked in the session\n *\n * @param boolean $delete Whether to delete the data in the session\n * @return array\n * @static\n */\n public static function getStackedData($delete = true)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStackedData($delete);\n }\n\n /**\n * Disable the Debugbar\n *\n * @static\n */\n public static function disable()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->disable();\n }\n\n /**\n * Adds a measure\n *\n * @param string $label\n * @param float $start\n * @param float $end\n * @param array|null $params\n * @param string|null $collector\n * @param string|null $group\n * @static\n */\n public static function addMeasure($label, $start, $end, $params = [], $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addMeasure($label, $start, $end, $params, $collector, $group);\n }\n\n /**\n * Utility function to measure the execution of a Closure\n *\n * @param string $label\n * @param \\Closure $closure\n * @param string|null $collector\n * @param string|null $group\n * @return mixed\n * @static\n */\n public static function measure($label, $closure, $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->measure($label, $closure, $collector, $group);\n }\n\n /**\n * Collect data in a CLI request\n *\n * @return array\n * @static\n */\n public static function collectConsole()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->collectConsole();\n }\n\n /**\n * Adds a message to the MessagesCollector\n * \n * A message can be anything from an object to a string\n *\n * @param mixed $message\n * @param string $label\n * @static\n */\n public static function addMessage($message, $label = 'info')\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addMessage($message, $label);\n }\n\n /**\n * Checks if a data collector has been added\n *\n * @param string $name\n * @return boolean\n * @static\n */\n public static function hasCollector($name)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->hasCollector($name);\n }\n\n /**\n * Returns a data collector\n *\n * @param string $name\n * @return \\DebugBar\\DataCollector\\DataCollectorInterface\n * @throws DebugBarException\n * @static\n */\n public static function getCollector($name)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCollector($name);\n }\n\n /**\n * Returns an array of all data collectors\n *\n * @return array[DataCollectorInterface]\n * @static\n */\n public static function getCollectors()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCollectors();\n }\n\n /**\n * Sets the request id generator\n *\n * @param \\DebugBar\\RequestIdGeneratorInterface $generator\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setRequestIdGenerator($generator)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setRequestIdGenerator($generator);\n }\n\n /**\n * @return \\DebugBar\\RequestIdGeneratorInterface\n * @static\n */\n public static function getRequestIdGenerator()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getRequestIdGenerator();\n }\n\n /**\n * Returns the id of the current request\n *\n * @return string\n * @static\n */\n public static function getCurrentRequestId()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCurrentRequestId();\n }\n\n /**\n * Sets the storage backend to use to store the collected data\n *\n * @param \\DebugBar\\StorageInterface $storage\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStorage($storage = null)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStorage($storage);\n }\n\n /**\n * @return \\DebugBar\\StorageInterface\n * @static\n */\n public static function getStorage()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStorage();\n }\n\n /**\n * Checks if the data will be persisted\n *\n * @return boolean\n * @static\n */\n public static function isDataPersisted()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isDataPersisted();\n }\n\n /**\n * Sets the HTTP driver\n *\n * @param \\DebugBar\\HttpDriverInterface $driver\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setHttpDriver($driver)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setHttpDriver($driver);\n }\n\n /**\n * Returns collected data\n * \n * Will collect the data if none have been collected yet\n *\n * @return array\n * @static\n */\n public static function getData()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getData();\n }\n\n /**\n * Returns an array of HTTP headers containing the data\n *\n * @param string $headerName\n * @param integer $maxHeaderLength\n * @return array\n * @static\n */\n public static function getDataAsHeaders($headerName = 'phpdebugbar', $maxHeaderLength = 4096, $maxTotalHeaderLength = 250000)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getDataAsHeaders($headerName, $maxHeaderLength, $maxTotalHeaderLength);\n }\n\n /**\n * Sends the data through the HTTP headers\n *\n * @param bool $useOpenHandler\n * @param string $headerName\n * @param integer $maxHeaderLength\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function sendDataInHeaders($useOpenHandler = null, $headerName = 'phpdebugbar', $maxHeaderLength = 4096)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->sendDataInHeaders($useOpenHandler, $headerName, $maxHeaderLength);\n }\n\n /**\n * Stacks the data in the session for later rendering\n *\n * @static\n */\n public static function stackData()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->stackData();\n }\n\n /**\n * Sets the key to use in the $_SESSION array\n *\n * @param string $ns\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStackDataSessionNamespace($ns)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStackDataSessionNamespace($ns);\n }\n\n /**\n * Returns the key used in the $_SESSION array\n *\n * @return string\n * @static\n */\n public static function getStackDataSessionNamespace()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStackDataSessionNamespace();\n }\n\n /**\n * Sets whether to only use the session to store stacked data even\n * if a storage is enabled\n *\n * @param boolean $enabled\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStackAlwaysUseSessionStorage($enabled = true)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStackAlwaysUseSessionStorage($enabled);\n }\n\n /**\n * Checks if the session is always used to store stacked data\n * even if a storage is enabled\n *\n * @return boolean\n * @static\n */\n public static function isStackAlwaysUseSessionStorage()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isStackAlwaysUseSessionStorage();\n }\n\n /**\n * @static\n */\n public static function offsetSet($key, $value)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetSet($key, $value);\n }\n\n /**\n * @static\n */\n public static function offsetGet($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * @static\n */\n public static function offsetExists($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * @static\n */\n public static function offsetUnset($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetUnset($key);\n }\n\n }\n }\n\nnamespace Barryvdh\\DomPDF\\Facade {\n /**\n * @method static BasePDF setBaseHost(string $baseHost)\n * @method static BasePDF setBasePath(string $basePath)\n * @method static BasePDF setCanvas(\\Dompdf\\Canvas $canvas)\n * @method static BasePDF setCallbacks(array<string, mixed> $callbacks)\n * @method static BasePDF setCss(\\Dompdf\\Css\\Stylesheet $css)\n * @method static BasePDF setDefaultView(string $defaultView, array<string, mixed> $options)\n * @method static BasePDF setDom(\\DOMDocument $dom)\n * @method static BasePDF setFontMetrics(\\Dompdf\\FontMetrics $fontMetrics)\n * @method static BasePDF setHttpContext(resource|array<string, mixed> $httpContext)\n * @method static BasePDF setPaper(string|float[] $paper, string $orientation = 'portrait')\n * @method static BasePDF setProtocol(string $protocol)\n * @method static BasePDF setTree(\\Dompdf\\Frame\\FrameTree $tree)\n */\n class Pdf {\n /**\n * Get the DomPDF instance\n *\n * @static\n */\n public static function getDomPDF()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->getDomPDF();\n }\n\n /**\n * Show or hide warnings\n *\n * @static\n */\n public static function setWarnings($warnings)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setWarnings($warnings);\n }\n\n /**\n * Load a HTML string\n *\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadHTML($string, $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadHTML($string, $encoding);\n }\n\n /**\n * Load a HTML file\n *\n * @static\n */\n public static function loadFile($file)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadFile($file);\n }\n\n /**\n * Add metadata info\n *\n * @param array<string, string> $info\n * @static\n */\n public static function addInfo($info)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->addInfo($info);\n }\n\n /**\n * Load a View and convert to HTML\n *\n * @param array<string, mixed> $data\n * @param array<string, mixed> $mergeData\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadView($view, $data = [], $mergeData = [], $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadView($view, $data, $mergeData, $encoding);\n }\n\n /**\n * Set/Change an option (or array of options) in Dompdf\n *\n * @param array<string, mixed>|string $attribute\n * @param null|mixed $value\n * @static\n */\n public static function setOption($attribute, $value = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOption($attribute, $value);\n }\n\n /**\n * Replace all the Options from DomPDF\n *\n * @param array<string, mixed> $options\n * @static\n */\n public static function setOptions($options, $mergeWithDefaults = false)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOptions($options, $mergeWithDefaults);\n }\n\n /**\n * Output the PDF as a string.\n * \n * The options parameter controls the output. Accepted options are:\n * \n * 'compress' = > 1 or 0 - apply content stream compression, this is\n * on (1) by default\n *\n * @param array<string, int> $options\n * @return string The rendered PDF as string\n * @static\n */\n public static function output($options = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->output($options);\n }\n\n /**\n * Save the PDF to a file\n *\n * @static\n */\n public static function save($filename, $disk = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->save($filename, $disk);\n }\n\n /**\n * Make the PDF downloadable by the user\n *\n * @static\n */\n public static function download($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->download($filename);\n }\n\n /**\n * Return a response with the PDF to show in the browser\n *\n * @static\n */\n public static function stream($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->stream($filename);\n }\n\n /**\n * Render the PDF\n *\n * @static\n */\n public static function render()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->render();\n }\n\n /**\n * @param array<string> $pc\n * @static\n */\n public static function setEncryption($password, $ownerpassword = '', $pc = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setEncryption($password, $ownerpassword, $pc);\n }\n\n }\n /**\n * @method static BasePDF setBaseHost(string $baseHost)\n * @method static BasePDF setBasePath(string $basePath)\n * @method static BasePDF setCanvas(\\Dompdf\\Canvas $canvas)\n * @method static BasePDF setCallbacks(array<string, mixed> $callbacks)\n * @method static BasePDF setCss(\\Dompdf\\Css\\Stylesheet $css)\n * @method static BasePDF setDefaultView(string $defaultView, array<string, mixed> $options)\n * @method static BasePDF setDom(\\DOMDocument $dom)\n * @method static BasePDF setFontMetrics(\\Dompdf\\FontMetrics $fontMetrics)\n * @method static BasePDF setHttpContext(resource|array<string, mixed> $httpContext)\n * @method static BasePDF setPaper(string|float[] $paper, string $orientation = 'portrait')\n * @method static BasePDF setProtocol(string $protocol)\n * @method static BasePDF setTree(\\Dompdf\\Frame\\FrameTree $tree)\n */\n class Pdf {\n /**\n * Get the DomPDF instance\n *\n * @static\n */\n public static function getDomPDF()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->getDomPDF();\n }\n\n /**\n * Show or hide warnings\n *\n * @static\n */\n public static function setWarnings($warnings)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setWarnings($warnings);\n }\n\n /**\n * Load a HTML string\n *\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadHTML($string, $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadHTML($string, $encoding);\n }\n\n /**\n * Load a HTML file\n *\n * @static\n */\n public static function loadFile($file)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadFile($file);\n }\n\n /**\n * Add metadata info\n *\n * @param array<string, string> $info\n * @static\n */\n public static function addInfo($info)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->addInfo($info);\n }\n\n /**\n * Load a View and convert to HTML\n *\n * @param array<string, mixed> $data\n * @param array<string, mixed> $mergeData\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadView($view, $data = [], $mergeData = [], $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadView($view, $data, $mergeData, $encoding);\n }\n\n /**\n * Set/Change an option (or array of options) in Dompdf\n *\n * @param array<string, mixed>|string $attribute\n * @param null|mixed $value\n * @static\n */\n public static function setOption($attribute, $value = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOption($attribute, $value);\n }\n\n /**\n * Replace all the Options from DomPDF\n *\n * @param array<string, mixed> $options\n * @static\n */\n public static function setOptions($options, $mergeWithDefaults = false)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOptions($options, $mergeWithDefaults);\n }\n\n /**\n * Output the PDF as a string.\n * \n * The options parameter controls the output. Accepted options are:\n * \n * 'compress' = > 1 or 0 - apply content stream compression, this is\n * on (1) by default\n *\n * @param array<string, int> $options\n * @return string The rendered PDF as string\n * @static\n */\n public static function output($options = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->output($options);\n }\n\n /**\n * Save the PDF to a file\n *\n * @static\n */\n public static function save($filename, $disk = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->save($filename, $disk);\n }\n\n /**\n * Make the PDF downloadable by the user\n *\n * @static\n */\n public static function download($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->download($filename);\n }\n\n /**\n * Return a response with the PDF to show in the browser\n *\n * @static\n */\n public static function stream($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->stream($filename);\n }\n\n /**\n * Render the PDF\n *\n * @static\n */\n public static function render()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->render();\n }\n\n /**\n * @param array<string> $pc\n * @static\n */\n public static function setEncryption($password, $ownerpassword = '', $pc = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setEncryption($password, $ownerpassword, $pc);\n }\n\n }\n }\n\nnamespace ChaseConey\\LaravelDatadogHelper {\n /**\n * @see LaravelDatadogHelper\n * @see \\Datadog\\DogStatsd\n */\n class Datadog extends \\DataDog\\DogStatsd {\n /**\n * @static\n */\n public static function send($data, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->send($data, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Log timing information\n *\n * @param string $stat The metric to in log timing info for.\n * @param float $time The elapsed time (ms) to log\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function timing($stat, $time, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->timing($stat, $time, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * A convenient alias for the timing function when used with micro-timing\n *\n * @param string $stat The metric name\n * @param float $time The elapsed time to log, IN SECONDS\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function microtiming($stat, $time, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->microtiming($stat, $time, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Gauge\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function gauge($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->gauge($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Histogram\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function histogram($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->histogram($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Distribution\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function distribution($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->distribution($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Set\n *\n * @param string $stat The metric\n * @param string|float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function set($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->set($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Increments one or more stats counters\n *\n * @param string|array $stats The metric(s) to increment.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param int $value the amount to increment by (default 1)\n * @return void\n * @static\n */\n public static function increment($stats, $sampleRate = 1.0, $tags = null, $value = 1, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->increment($stats, $sampleRate, $tags, $value, $cardinality);\n }\n\n /**\n * Decrements one or more stats counters.\n *\n * @param string|array $stats The metric(s) to decrement.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param int $value the amount to decrement by (default -1)\n * @return void\n * @static\n */\n public static function decrement($stats, $sampleRate = 1.0, $tags = null, $value = -1, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->decrement($stats, $sampleRate, $tags, $value, $cardinality);\n }\n\n /**\n * Updates one or more stats counters by arbitrary amounts.\n *\n * @param string|array $stats The metric(s) to update. Should be either a string or array of metrics.\n * @param int $delta The amount to increment/decrement each metric by.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function updateStats($stats, $delta = 1, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->updateStats($stats, $delta, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * @deprecated service_check will be removed in future versions in favor of serviceCheck\n * \n * Send a custom service check status over UDP\n * @param string $name service check name\n * @param int $status service check status code (see OK, WARNING,...)\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param string $hostname hostname to associate with this service check status\n * @param string $message message to associate with this service check status\n * @param int $timestamp timestamp for the service check status (defaults to now)\n * @return void\n * @static\n */\n public static function service_check($name, $status, $tags = null, $hostname = null, $message = null, $timestamp = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->service_check($name, $status, $tags, $hostname, $message, $timestamp);\n }\n\n /**\n * Send a custom service check status over UDP\n *\n * @param string $name service check name\n * @param int $status service check status code (see OK, WARNING,...)\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param string $hostname hostname to associate with this service check status\n * @param string $message message to associate with this service check status\n * @param int $timestamp timestamp for the service check status (defaults to now)\n * @return void\n * @static\n */\n public static function serviceCheck($name, $status, $tags = null, $hostname = null, $message = null, $timestamp = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->serviceCheck($name, $status, $tags, $hostname, $message, $timestamp);\n }\n\n /**\n * @static\n */\n public static function report($message)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->report($message);\n }\n\n /**\n * @throws \\Exception|\\Throwable\n * @static\n */\n public static function flush($message)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->flush($message);\n }\n\n /**\n * Formats $vals array into event for submission to Datadog via UDP\n *\n * @param array $vals Optional values of the event. See\n * https://docs.datadoghq.com/api/?lang=bash#post-an-event for the valid keys\n * @return bool\n * @static\n */\n public static function event($title, $vals = [])\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->event($title, $vals);\n }\n\n /**\n * @static\n */\n public static function setMetricsPrefix($metricsPrefix)\n {\n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->setMetricsPrefix($metricsPrefix);\n }\n\n }\n }\n\nnamespace Spatie\\LaravelIgnition\\Facades {\n /**\n * @see \\Spatie\\FlareClient\\Flare\n */\n class Flare {\n /**\n * @static\n */\n public static function make($apiKey = null, $contextDetector = null)\n {\n return \\Spatie\\FlareClient\\Flare::make($apiKey, $contextDetector);\n }\n\n /**\n * @static\n */\n public static function setApiToken($apiToken)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setApiToken($apiToken);\n }\n\n /**\n * @static\n */\n public static function apiTokenSet()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->apiTokenSet();\n }\n\n /**\n * @static\n */\n public static function setBaseUrl($baseUrl)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setBaseUrl($baseUrl);\n }\n\n /**\n * @static\n */\n public static function setStage($stage)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setStage($stage);\n }\n\n /**\n * @static\n */\n public static function sendReportsImmediately()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->sendReportsImmediately();\n }\n\n /**\n * @static\n */\n public static function determineVersionUsing($determineVersionCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->determineVersionUsing($determineVersionCallable);\n }\n\n /**\n * @static\n */\n public static function reportErrorLevels($reportErrorLevels)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportErrorLevels($reportErrorLevels);\n }\n\n /**\n * @static\n */\n public static function filterExceptionsUsing($filterExceptionsCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->filterExceptionsUsing($filterExceptionsCallable);\n }\n\n /**\n * @static\n */\n public static function filterReportsUsing($filterReportsCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->filterReportsUsing($filterReportsCallable);\n }\n\n /**\n * @param array<class-string<ArgumentReducer>|ArgumentReducer>|\\Spatie\\Backtrace\\Arguments\\ArgumentReducers|null $argumentReducers\n * @static\n */\n public static function argumentReducers($argumentReducers)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->argumentReducers($argumentReducers);\n }\n\n /**\n * @static\n */\n public static function withStackFrameArguments($withStackFrameArguments = true, $forcePHPIniSetting = false)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->withStackFrameArguments($withStackFrameArguments, $forcePHPIniSetting);\n }\n\n /**\n * @param class-string $exceptionClass\n * @static\n */\n public static function overrideGrouping($exceptionClass, $type = 'exception_message_and_class')\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->overrideGrouping($exceptionClass, $type);\n }\n\n /**\n * @static\n */\n public static function version()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->version();\n }\n\n /**\n * @return array<int, FlareMiddleware|class-string<FlareMiddleware>>\n * @static\n */\n public static function getMiddleware()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getMiddleware();\n }\n\n /**\n * @static\n */\n public static function setContextProviderDetector($contextDetector)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setContextProviderDetector($contextDetector);\n }\n\n /**\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * @static\n */\n public static function registerFlareHandlers()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerFlareHandlers();\n }\n\n /**\n * @static\n */\n public static function registerExceptionHandler()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerExceptionHandler();\n }\n\n /**\n * @static\n */\n public static function registerErrorHandler($errorLevels = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerErrorHandler($errorLevels);\n }\n\n /**\n * @param \\Spatie\\FlareClient\\FlareMiddleware\\FlareMiddleware|array<FlareMiddleware>|class-string<FlareMiddleware>|callable $middleware\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function registerMiddleware($middleware)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerMiddleware($middleware);\n }\n\n /**\n * @return array<int,FlareMiddleware|class-string<FlareMiddleware>>\n * @static\n */\n public static function getMiddlewares()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getMiddlewares();\n }\n\n /**\n * @param string $name\n * @param string $messageLevel\n * @param array<int, mixed> $metaData\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function glow($name, $messageLevel = 'info', $metaData = [])\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->glow($name, $messageLevel, $metaData);\n }\n\n /**\n * @static\n */\n public static function handleException($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->handleException($throwable);\n }\n\n /**\n * @return mixed\n * @static\n */\n public static function handleError($code, $message, $file = '', $line = 0)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->handleError($code, $message, $file, $line);\n }\n\n /**\n * @static\n */\n public static function applicationPath($applicationPath)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->applicationPath($applicationPath);\n }\n\n /**\n * @static\n */\n public static function report($throwable, $callback = null, $report = null, $handled = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->report($throwable, $callback, $report, $handled);\n }\n\n /**\n * @static\n */\n public static function reportHandled($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportHandled($throwable);\n }\n\n /**\n * @static\n */\n public static function reportMessage($message, $logLevel, $callback = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportMessage($message, $logLevel, $callback);\n }\n\n /**\n * @static\n */\n public static function sendTestReport($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->sendTestReport($throwable);\n }\n\n /**\n * @static\n */\n public static function reset()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reset();\n }\n\n /**\n * @static\n */\n public static function anonymizeIp()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->anonymizeIp();\n }\n\n /**\n * @param array<int, string> $fieldNames\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function censorRequestBodyFields($fieldNames)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->censorRequestBodyFields($fieldNames);\n }\n\n /**\n * @static\n */\n public static function createReport($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->createReport($throwable);\n }\n\n /**\n * @static\n */\n public static function createReportFromMessage($message, $logLevel)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->createReportFromMessage($message, $logLevel);\n }\n\n /**\n * @static\n */\n public static function stage($stage)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->stage($stage);\n }\n\n /**\n * @static\n */\n public static function messageLevel($messageLevel)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->messageLevel($messageLevel);\n }\n\n /**\n * @param string $groupName\n * @param mixed $default\n * @return array<int, mixed>\n * @static\n */\n public static function getGroup($groupName = 'context', $default = [])\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getGroup($groupName, $default);\n }\n\n /**\n * @static\n */\n public static function context($key, $value)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->context($key, $value);\n }\n\n /**\n * @param string $groupName\n * @param array<string, mixed> $properties\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function group($groupName, $properties)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->group($groupName, $properties);\n }\n\n }\n }\n\nnamespace Vinkla\\Hashids\\Facades {\n /**\n * @method static string encode(mixed ...$numbers)\n * @method static array decode(string $hash)\n * @method static string encodeHex(string $str)\n * @method static string decodeHex(string $hash)\n */\n class Hashids extends \\GrahamCampbell\\Manager\\AbstractManager {\n /**\n * @static\n */\n public static function getFactory()\n {\n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getFactory();\n }\n\n /**\n * Get a connection instance.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return object\n * @static\n */\n public static function connection($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Reconnect to the given connection.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return object\n * @static\n */\n public static function reconnect($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->reconnect($name);\n }\n\n /**\n * Disconnect from the given connection.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function disconnect($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->disconnect($name);\n }\n\n /**\n * Get the configuration for a connection.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return array\n * @static\n */\n public static function getConnectionConfig($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConnectionConfig($name);\n }\n\n /**\n * Get the default connection name.\n *\n * @return string\n * @static\n */\n public static function getDefaultConnection()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getDefaultConnection();\n }\n\n /**\n * Set the default connection name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultConnection($name)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->setDefaultConnection($name);\n }\n\n /**\n * Register an extension connection resolver.\n *\n * @param string $name\n * @param callable $resolver\n * @return void\n * @static\n */\n public static function extend($name, $resolver)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->extend($name, $resolver);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array<string,object>\n * @static\n */\n public static function getConnections()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConnections();\n }\n\n /**\n * Get the config instance.\n *\n * @return \\Illuminate\\Contracts\\Config\\Repository\n * @static\n */\n public static function getConfig()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConfig();\n }\n\n }\n }\n\nnamespace Illuminate\\Support {\n /**\n * @template TKey of array-key\n * @template-covariant TValue\n * @implements \\ArrayAccess<TKey, TValue>\n * @implements \\Illuminate\\Support\\Enumerable<TKey, TValue>\n */\n class Collection {\n /**\n * @see \\Barryvdh\\Debugbar\\ServiceProvider::register()\n * @static\n */\n public static function debug()\n {\n return \\Illuminate\\Support\\Collection::debug();\n }\n\n /**\n * @see \\Spatie\\Fractal\\FractalServiceProvider::packageBooted()\n * @param mixed $transformer\n * @static\n */\n public static function transformWith($transformer)\n {\n return \\Illuminate\\Support\\Collection::transformWith($transformer);\n }\n\n }\n }\n\nnamespace Illuminate\\Http {\n /**\n */\n class Request extends \\Symfony\\Component\\HttpFoundation\\Request {\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validate($rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validate($rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param string $errorBag\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validateWithBag($errorBag, $rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validateWithBag($errorBag, $rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignature($absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignature($absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @static\n */\n public static function hasValidRelativeSignature()\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignature();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignatureWhileIgnoring($ignoreQuery, $absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @static\n */\n public static function hasValidRelativeSignatureWhileIgnoring($ignoreQuery = [])\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignatureWhileIgnoring($ignoreQuery);\n }\n\n }\n }\n\nnamespace Illuminate\\Testing {\n /**\n * @template TResponse of \\Symfony\\Component\\HttpFoundation\\Response\n * @mixin \\Illuminate\\Http\\Response\n */\n class TestResponse {\n /**\n * @see \\JMac\\Testing\\AdditionalAssertionsServiceProvider::register()\n * @param array $structure\n * @static\n */\n public static function assertJsonTypedStructure($structure)\n {\n return \\Illuminate\\Testing\\TestResponse::assertJsonTypedStructure($structure);\n }\n\n /**\n * @see \\JMac\\Testing\\AdditionalAssertionsServiceProvider::register()\n * @param string $key\n * @static\n */\n public static function assertViewHasNull($key)\n {\n return \\Illuminate\\Testing\\TestResponse::assertViewHasNull($key);\n }\n\n }\n }\n\nnamespace Illuminate\\Database\\Schema {\n /**\n */\n class Blueprint {\n /**\n * @see \\Kalnoy\\Nestedset\\NestedSetServiceProvider::register()\n * @static\n */\n public static function nestedSet()\n {\n return \\Illuminate\\Database\\Schema\\Blueprint::nestedSet();\n }\n\n /**\n * @see \\Kalnoy\\Nestedset\\NestedSetServiceProvider::register()\n * @static\n */\n public static function dropNestedSet()\n {\n return \\Illuminate\\Database\\Schema\\Blueprint::dropNestedSet();\n }\n\n }\n }\n\nnamespace Illuminate\\Validation {\n /**\n */\n class Rule {\n /**\n * @see \\Propaganistas\\LaravelPhone\\PhoneServiceProvider::registerValidator()\n * @static\n */\n public static function phone()\n {\n return \\Illuminate\\Validation\\Rule::phone();\n }\n\n }\n }\n\nnamespace Illuminate\\Console\\Scheduling {\n /**\n */\n class Event {\n /**\n * @see \\Sentry\\Laravel\\Features\\ConsoleSchedulingIntegration::register()\n * @param string|null $monitorSlug\n * @param int|null $checkInMargin\n * @param int|null $maxRuntime\n * @param bool $updateMonitorConfig\n * @param int|null $failureIssueThreshold\n * @param int|null $recoveryThreshold\n * @static\n */\n public static function sentryMonitor($monitorSlug = null, $checkInMargin = null, $maxRuntime = null, $updateMonitorConfig = true, $failureIssueThreshold = null, $recoveryThreshold = null)\n {\n return \\Illuminate\\Console\\Scheduling\\Event::sentryMonitor($monitorSlug, $checkInMargin, $maxRuntime, $updateMonitorConfig, $failureIssueThreshold, $recoveryThreshold);\n }\n\n }\n }\n\nnamespace Illuminate\\Http\\Client {\n /**\n * @mixin \\Illuminate\\Http\\Client\\PendingRequest\n */\n class Factory {\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatApi();\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatAnalyticsApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatAnalyticsApi();\n }\n\n }\n }\n\nnamespace Illuminate\\Routing {\n /**\n * @mixin \\Illuminate\\Routing\\RouteRegistrar\n */\n class Router {\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::auth()\n * @param mixed $options\n * @static\n */\n public static function auth($options = [])\n {\n return \\Illuminate\\Routing\\Router::auth($options);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::resetPassword()\n * @static\n */\n public static function resetPassword()\n {\n return \\Illuminate\\Routing\\Router::resetPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::confirmPassword()\n * @static\n */\n public static function confirmPassword()\n {\n return \\Illuminate\\Routing\\Router::confirmPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::emailVerification()\n * @static\n */\n public static function emailVerification()\n {\n return \\Illuminate\\Routing\\Router::emailVerification();\n }\n\n }\n /**\n */\n class ResponseFactory {\n /**\n * @see \\Jiminny\\Providers\\ResponseMacroServiceProvider::boot()\n * @param mixed $data\n * @param mixed $status\n * @param array $headers\n * @param mixed $options\n * @static\n */\n public static function twiml($data = null, $status = 200, $headers = [], $options = 0)\n {\n return \\Illuminate\\Routing\\ResponseFactory::twiml($data, $status, $headers, $options);\n }\n\n }\n }\n\nnamespace Illuminate\\Database\\Eloquent {\n /**\n * @template TKey of array-key\n * @template TModel of \\Illuminate\\Database\\Eloquent\\Model\n * @extends \\Illuminate\\Support\\Collection<TKey, TModel>\n */\n class Collection extends \\Illuminate\\Support\\Collection {\n }\n }\n\n\nnamespace {\n class App extends \\Illuminate\\Support\\Facades\\App {}\n class Arr extends \\Illuminate\\Support\\Arr {}\n class Artisan extends \\Illuminate\\Support\\Facades\\Artisan {}\n class Auth extends \\Illuminate\\Support\\Facades\\Auth {}\n class Benchmark extends \\Illuminate\\Support\\Benchmark {}\n class Blade extends \\Illuminate\\Support\\Facades\\Blade {}\n class Broadcast extends \\Illuminate\\Support\\Facades\\Broadcast {}\n class Bus extends \\Illuminate\\Support\\Facades\\Bus {}\n class Cache extends \\Illuminate\\Support\\Facades\\Cache {}\n class Concurrency extends \\Illuminate\\Support\\Facades\\Concurrency {}\n class Config extends \\Illuminate\\Support\\Facades\\Config {}\n class Context extends \\Illuminate\\Support\\Facades\\Context {}\n class Cookie extends \\Illuminate\\Support\\Facades\\Cookie {}\n class Crypt extends \\Illuminate\\Support\\Facades\\Crypt {}\n class DB extends \\Illuminate\\Support\\Facades\\DB {}\n\n /**\n * @template TCollection of static\n * @template TModel of static\n * @template TValue of static\n * @template TValue of static\n */\n class Eloquent extends \\Illuminate\\Database\\Eloquent\\Model { /**\n * Create and return an un-saved model instance.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function make($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->make($attributes);\n }\n\n /**\n * Register a new global scope.\n *\n * @param string $identifier\n * @param \\Illuminate\\Database\\Eloquent\\Scope|\\Closure $scope\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withGlobalScope($identifier, $scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withGlobalScope($identifier, $scope);\n }\n\n /**\n * Remove a registered global scope.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Scope|string $scope\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScope($scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScope($scope);\n }\n\n /**\n * Remove all or passed registered global scopes.\n *\n * @param array|null $scopes\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScopes($scopes = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScopes($scopes);\n }\n\n /**\n * Remove all global scopes except the given scopes.\n *\n * @param array $scopes\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScopesExcept($scopes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScopesExcept($scopes);\n }\n\n /**\n * Get an array of global scopes that were removed from the query.\n *\n * @return array\n * @static\n */\n public static function removedScopes()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->removedScopes();\n }\n\n /**\n * Add a where clause on the primary key to the query.\n *\n * @param mixed $id\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereKey($id)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereKey($id);\n }\n\n /**\n * Add a where clause on the primary key to the query.\n *\n * @param mixed $id\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereKeyNot($id)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereKeyNot($id);\n }\n\n /**\n * Add a basic where clause to the query.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function where($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->where($column, $operator, $value, $boolean);\n }\n\n /**\n * Add a basic where clause to the query, and return the first result.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return TModel|null\n * @static\n */\n public static function firstWhere($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstWhere($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|array|string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhere($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhere($column, $operator, $value);\n }\n\n /**\n * Add a basic \"where not\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNot($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereNot($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where not\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|array|string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNot($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereNot($column, $operator, $value);\n }\n\n /**\n * Add an \"order by\" clause for a timestamp to the query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function latest($column = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->latest($column);\n }\n\n /**\n * Add an \"order by\" clause for a timestamp to the query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function oldest($column = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->oldest($column);\n }\n\n /**\n * Create a collection of models from plain arrays.\n *\n * @param array $items\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function hydrate($items)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hydrate($items);\n }\n\n /**\n * Insert into the database after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return bool\n * @static\n */\n public static function fillAndInsert($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsert($values);\n }\n\n /**\n * Insert (ignoring errors) into the database after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return int\n * @static\n */\n public static function fillAndInsertOrIgnore($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsertOrIgnore($values);\n }\n\n /**\n * Insert a record into the database and get its ID after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<string, mixed> $values\n * @return int\n * @static\n */\n public static function fillAndInsertGetId($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsertGetId($values);\n }\n\n /**\n * Enrich the given values by merging in the model's default attributes, adding timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return array<int, array<string, mixed>>\n * @static\n */\n public static function fillForInsert($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillForInsert($values);\n }\n\n /**\n * Create a collection of models from a raw query.\n *\n * @param string $query\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function fromQuery($query, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fromQuery($query, $bindings);\n }\n\n /**\n * Find a model by its primary key.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel|null)\n * @static\n */\n public static function find($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->find($id, $columns);\n }\n\n /**\n * Find a sole model by its primary key.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function findSole($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findSole($id, $columns);\n }\n\n /**\n * Find multiple models by their primary keys.\n *\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $ids\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function findMany($ids, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findMany($ids, $columns);\n }\n\n /**\n * Find a model by its primary key or throw an exception.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel)\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function findOrFail($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOrFail($id, $columns);\n }\n\n /**\n * Find a model by its primary key or return fresh model instance.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel)\n * @static\n */\n public static function findOrNew($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOrNew($id, $columns);\n }\n\n /**\n * Find a model by its primary key or call a callback.\n *\n * @template TValue\n * @param mixed $id\n * @param (\\Closure(): TValue)|list<string>|string $columns\n * @param (\\Closure(): TValue)|null $callback\n * @return ( $id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>)\n * ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * : TModel|TValue\n * )\n * @static\n */\n public static function findOr($id, $columns = [], $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOr($id, $columns, $callback);\n }\n\n /**\n * Get the first record matching the attributes or instantiate it.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function firstOrNew($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrNew($attributes, $values);\n }\n\n /**\n * Get the first record matching the attributes. If the record is not found, create it.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function firstOrCreate($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrCreate($attributes, $values);\n }\n\n /**\n * Attempt to create the record. If a unique constraint violation occurs, attempt to find the matching record.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function createOrFirst($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->createOrFirst($attributes, $values);\n }\n\n /**\n * Create or update a record matching the attributes, and fill it with values.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function updateOrCreate($attributes, $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->updateOrCreate($attributes, $values);\n }\n\n /**\n * Create a record matching the attributes, or increment the existing record.\n *\n * @param array $attributes\n * @param string $column\n * @param int|float $default\n * @param int|float $step\n * @param array $extra\n * @return TModel\n * @static\n */\n public static function incrementOrCreate($attributes, $column = 'count', $default = 1, $step = 1, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->incrementOrCreate($attributes, $column, $default, $step, $extra);\n }\n\n /**\n * Execute the query and get the first result or throw an exception.\n *\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function firstOrFail($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrFail($columns);\n }\n\n /**\n * Execute the query and get the first result or call a callback.\n *\n * @template TValue\n * @param (\\Closure(): TValue)|list<string> $columns\n * @param (\\Closure(): TValue)|null $callback\n * @return TModel|TValue\n * @static\n */\n public static function firstOr($columns = [], $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOr($columns, $callback);\n }\n\n /**\n * Execute the query and get the first result if it's the sole matching record.\n *\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function sole($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->sole($columns);\n }\n\n /**\n * Get a single column's value from the first result of a query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @static\n */\n public static function value($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->value($column);\n }\n\n /**\n * Get a single column's value from the first result of a query if it's the sole matching record.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function soleValue($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->soleValue($column);\n }\n\n /**\n * Get a single column's value from the first result of the query or throw an exception.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function valueOrFail($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->valueOrFail($column);\n }\n\n /**\n * Execute the query as a \"select\" statement.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function get($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->get($columns);\n }\n\n /**\n * Get the hydrated models without eager loading.\n *\n * @param array|string $columns\n * @return array<int, TModel>\n * @static\n */\n public static function getModels($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getModels($columns);\n }\n\n /**\n * Eager load the relationships for the models.\n *\n * @param array<int, TModel> $models\n * @return array<int, TModel>\n * @static\n */\n public static function eagerLoadRelations($models)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->eagerLoadRelations($models);\n }\n\n /**\n * Register a closure to be invoked after the query is executed.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function afterQuery($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->afterQuery($callback);\n }\n\n /**\n * Invoke the \"after query\" modification callbacks.\n *\n * @param mixed $result\n * @return mixed\n * @static\n */\n public static function applyAfterQueryCallbacks($result)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->applyAfterQueryCallbacks($result);\n }\n\n /**\n * Get a lazy collection for the given query.\n *\n * @return \\Illuminate\\Support\\LazyCollection<int, TModel>\n * @static\n */\n public static function cursor()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->cursor();\n }\n\n /**\n * Get a collection with the values of a given column.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param string|null $key\n * @return \\Illuminate\\Support\\Collection<array-key, mixed>\n * @static\n */\n public static function pluck($column, $key = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->pluck($column, $key);\n }\n\n /**\n * Paginate the given query.\n *\n * @param int|null|\\Closure $perPage\n * @param array|string $columns\n * @param string $pageName\n * @param int|null $page\n * @param \\Closure|int|null $total\n * @return \\Illuminate\\Pagination\\LengthAwarePaginator\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function paginate($perPage = null, $columns = [], $pageName = 'page', $page = null, $total = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->paginate($perPage, $columns, $pageName, $page, $total);\n }\n\n /**\n * Paginate the given query into a simple paginator.\n *\n * @param int|null $perPage\n * @param array|string $columns\n * @param string $pageName\n * @param int|null $page\n * @return \\Illuminate\\Contracts\\Pagination\\Paginator\n * @static\n */\n public static function simplePaginate($perPage = null, $columns = [], $pageName = 'page', $page = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->simplePaginate($perPage, $columns, $pageName, $page);\n }\n\n /**\n * Paginate the given query into a cursor paginator.\n *\n * @param int|null $perPage\n * @param array|string $columns\n * @param string $cursorName\n * @param \\Illuminate\\Pagination\\Cursor|string|null $cursor\n * @return \\Illuminate\\Contracts\\Pagination\\CursorPaginator\n * @static\n */\n public static function cursorPaginate($perPage = null, $columns = [], $cursorName = 'cursor', $cursor = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->cursorPaginate($perPage, $columns, $cursorName, $cursor);\n }\n\n /**\n * Save a new model and return the instance.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function create($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->create($attributes);\n }\n\n /**\n * Save a new model and return the instance without raising model events.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function createQuietly($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->createQuietly($attributes);\n }\n\n /**\n * Save a new model and return the instance. Allow mass-assignment.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function forceCreate($attributes)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->forceCreate($attributes);\n }\n\n /**\n * Save a new model instance with mass assignment without raising model events.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function forceCreateQuietly($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->forceCreateQuietly($attributes);\n }\n\n /**\n * Insert new records or update the existing ones.\n *\n * @param array $values\n * @param array|string $uniqueBy\n * @param array|null $update\n * @return int\n * @static\n */\n public static function upsert($values, $uniqueBy, $update = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->upsert($values, $uniqueBy, $update);\n }\n\n /**\n * Register a replacement for the default delete function.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function onDelete($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n $instance->onDelete($callback);\n }\n\n /**\n * Call the given local model scopes.\n *\n * @param array|string $scopes\n * @return static|mixed\n * @static\n */\n public static function scopes($scopes)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->scopes($scopes);\n }\n\n /**\n * Apply the scopes to the Eloquent builder instance and return it.\n *\n * @return static\n * @static\n */\n public static function applyScopes()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->applyScopes();\n }\n\n /**\n * Prevent the specified relations from being eager loaded.\n *\n * @param mixed $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function without($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->without($relations);\n }\n\n /**\n * Set the relationships that should be eager loaded while removing any previously added eager loading specifications.\n *\n * @param array<array-key, array|(\\Closure(\\Illuminate\\Database\\Eloquent\\Relations\\Relation<*,*,*>): mixed)|string>|string $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withOnly($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withOnly($relations);\n }\n\n /**\n * Create a new instance of the model being queried.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function newModelInstance($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->newModelInstance($attributes);\n }\n\n /**\n * Specify attributes that should be added to any new models created by this builder.\n * \n * The given key / value pairs will also be added as where conditions to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|array|string $attributes\n * @param mixed $value\n * @param bool $asConditions\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAttributes($attributes, $value = null, $asConditions = true)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAttributes($attributes, $value, $asConditions);\n }\n\n /**\n * Apply query-time casts to the model instance.\n *\n * @param array $casts\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withCasts($casts)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withCasts($casts);\n }\n\n /**\n * Execute the given Closure within a transaction savepoint if needed.\n *\n * @template TModelValue\n * @param \\Closure(): TModelValue $scope\n * @return TModelValue\n * @static\n */\n public static function withSavepointIfNeeded($scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withSavepointIfNeeded($scope);\n }\n\n /**\n * Get the underlying query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function getQuery()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getQuery();\n }\n\n /**\n * Set the underlying query builder instance.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function setQuery($query)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setQuery($query);\n }\n\n /**\n * Get a base query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function toBase()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->toBase();\n }\n\n /**\n * Get the relationships being eagerly loaded.\n *\n * @return array\n * @static\n */\n public static function getEagerLoads()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getEagerLoads();\n }\n\n /**\n * Set the relationships being eagerly loaded.\n *\n * @param array $eagerLoad\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function setEagerLoads($eagerLoad)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setEagerLoads($eagerLoad);\n }\n\n /**\n * Indicate that the given relationships should not be eagerly loaded.\n *\n * @param array $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutEagerLoad($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutEagerLoad($relations);\n }\n\n /**\n * Flush the relationships being eagerly loaded.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutEagerLoads()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutEagerLoads();\n }\n\n /**\n * Get the \"limit\" value from the query or null if it's not set.\n *\n * @return mixed\n * @static\n */\n public static function getLimit()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getLimit();\n }\n\n /**\n * Get the \"offset\" value from the query or null if it's not set.\n *\n * @return mixed\n * @static\n */\n public static function getOffset()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getOffset();\n }\n\n /**\n * Get the model instance being queried.\n *\n * @return TModel\n * @static\n */\n public static function getModel()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getModel();\n }\n\n /**\n * Set a model instance for the model being queried.\n *\n * @template TModelNew of \\Illuminate\\Database\\Eloquent\\Model\n * @param TModelNew $model\n * @return static<TModelNew>\n * @static\n */\n public static function setModel($model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setModel($model);\n }\n\n /**\n * Get the given macro by name.\n *\n * @param string $name\n * @return \\Closure\n * @static\n */\n public static function getMacro($name)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getMacro($name);\n }\n\n /**\n * Checks if a macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hasMacro($name);\n }\n\n /**\n * Get the given global macro by name.\n *\n * @param string $name\n * @return \\Closure\n * @static\n */\n public static function getGlobalMacro($name)\n {\n return \\Illuminate\\Database\\Eloquent\\Builder::getGlobalMacro($name);\n }\n\n /**\n * Checks if a global macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasGlobalMacro($name)\n {\n return \\Illuminate\\Database\\Eloquent\\Builder::hasGlobalMacro($name);\n }\n\n /**\n * Clone the Eloquent query builder.\n *\n * @return static\n * @static\n */\n public static function clone()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->clone();\n }\n\n /**\n * Register a closure to be invoked on a clone.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function onClone($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->onClone($callback);\n }\n\n /**\n * Chunk the results of the query.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @return bool\n * @static\n */\n public static function chunk($count, $callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunk($count, $callback);\n }\n\n /**\n * Run a map over each item while chunking.\n *\n * @template TReturn\n * @param callable(TValue): TReturn $callback\n * @param int $count\n * @return \\Illuminate\\Support\\Collection<int, TReturn>\n * @static\n */\n public static function chunkMap($callback, $count = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkMap($callback, $count);\n }\n\n /**\n * Execute a callback over each item while chunking.\n *\n * @param callable(TValue, int): mixed $callback\n * @param int $count\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function each($callback, $count = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->each($callback, $count);\n }\n\n /**\n * Chunk the results of a query by comparing IDs.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function chunkById($count, $callback, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkById($count, $callback, $column, $alias);\n }\n\n /**\n * Chunk the results of a query by comparing IDs in descending order.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function chunkByIdDesc($count, $callback, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkByIdDesc($count, $callback, $column, $alias);\n }\n\n /**\n * Chunk the results of a query by comparing IDs in a given order.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @param bool $descending\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function orderedChunkById($count, $callback, $column = null, $alias = null, $descending = false)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orderedChunkById($count, $callback, $column, $alias, $descending);\n }\n\n /**\n * Execute a callback over each item while chunking by ID.\n *\n * @param callable(TValue, int): mixed $callback\n * @param int $count\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function eachById($callback, $count = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->eachById($callback, $count, $column, $alias);\n }\n\n /**\n * Query lazily, by chunks of the given size.\n *\n * @param int $chunkSize\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazy($chunkSize = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazy($chunkSize);\n }\n\n /**\n * Query lazily, by chunking the results of a query by comparing IDs.\n *\n * @param int $chunkSize\n * @param string|null $column\n * @param string|null $alias\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazyById($chunkSize = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazyById($chunkSize, $column, $alias);\n }\n\n /**\n * Query lazily, by chunking the results of a query by comparing IDs in descending order.\n *\n * @param int $chunkSize\n * @param string|null $column\n * @param string|null $alias\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazyByIdDesc($chunkSize = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazyByIdDesc($chunkSize, $column, $alias);\n }\n\n /**\n * Execute the query and get the first result.\n *\n * @param array|string $columns\n * @return TValue|null\n * @static\n */\n public static function first($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->first($columns);\n }\n\n /**\n * Execute the query and get the first result if it's the sole matching record.\n *\n * @param array|string $columns\n * @return TValue\n * @throws \\Illuminate\\Database\\RecordsNotFoundException\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function baseSole($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->baseSole($columns);\n }\n\n /**\n * Pass the query to a given callback and then return it.\n *\n * @param callable($this): mixed $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function tap($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->tap($callback);\n }\n\n /**\n * Pass the query to a given callback and return the result.\n *\n * @template TReturn\n * @param (callable($this): TReturn) $callback\n * @return (TReturn is null|void ? $this : TReturn)\n * @static\n */\n public static function pipe($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->pipe($callback);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Add a relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param string $operator\n * @param int $count\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function has($relation, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->has($relation, $operator, $count, $boolean, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHas($relation, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orHas($relation, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function doesntHave($relation, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->doesntHave($relation, $boolean, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orDoesntHave($relation)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orDoesntHave($relation);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n * \n * Also load the relationship with the same condition.\n *\n * @param string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withWhereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withWhereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHave($relation, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHave($relation, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHave($relation, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHave($relation, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $operator\n * @param int $count\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function hasMorph($relation, $types, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hasMorph($relation, $types, $operator, $count, $boolean, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHasMorph($relation, $types, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orHasMorph($relation, $types, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function doesntHaveMorph($relation, $types, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->doesntHaveMorph($relation, $types, $boolean, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param string|array<int, string> $types\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orDoesntHaveMorph($relation, $types)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orDoesntHaveMorph($relation, $types);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereHasMorph($relation, $types, $callback, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereHasMorph($relation, $types, $callback, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHaveMorph($relation, $types, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHaveMorph($relation, $types, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHaveMorph($relation, $types, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHaveMorph($relation, $types, $callback);\n }\n\n /**\n * Add a basic where clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a basic where clause to a relationship query and eager-load the relationship with the same conditions.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @param \\Closure|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withWhereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withWhereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add an \"or where\" clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a basic count / exists condition to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHaveRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHaveRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add an \"or where\" clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHaveRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHaveRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with a where clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with an \"or where\" clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with a doesn't have clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphDoesntHaveRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphDoesntHaveRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with an \"or doesn't have\" clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphDoesntHaveRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphDoesntHaveRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a morph-to relationship condition to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string|null $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphedTo($relation, $model, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphedTo($relation, $model, $boolean);\n }\n\n /**\n * Add a not morph-to relationship condition to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotMorphedTo($relation, $model, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereNotMorphedTo($relation, $model, $boolean);\n }\n\n /**\n * Add a morph-to relationship condition to the query with an \"or where\" clause.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string|null $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphedTo($relation, $model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphedTo($relation, $model);\n }\n\n /**\n * Add a not morph-to relationship condition to the query with an \"or where\" clause.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotMorphedTo($relation, $model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereNotMorphedTo($relation, $model);\n }\n\n /**\n * Add a \"belongs to\" relationship where clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model|\\Illuminate\\Database\\Eloquent\\Collection<int, \\Illuminate\\Database\\Eloquent\\Model> $related\n * @param string|null $relationshipName\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\Illuminate\\Database\\Eloquent\\RelationNotFoundException\n * @static\n */\n public static function whereBelongsTo($related, $relationshipName = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereBelongsTo($related, $relationshipName, $boolean);\n }\n\n /**\n * Add a \"BelongsTo\" relationship with an \"or where\" clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model $related\n * @param string|null $relationshipName\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function orWhereBelongsTo($related, $relationshipName = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereBelongsTo($related, $relationshipName);\n }\n\n /**\n * Add a \"belongs to many\" relationship where clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model|\\Illuminate\\Database\\Eloquent\\Collection<int, \\Illuminate\\Database\\Eloquent\\Model> $related\n * @param string|null $relationshipName\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\Illuminate\\Database\\Eloquent\\RelationNotFoundException\n * @static\n */\n public static function whereAttachedTo($related, $relationshipName = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereAttachedTo($related, $relationshipName, $boolean);\n }\n\n /**\n * Add a \"belongs to many\" relationship with an \"or where\" clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model $related\n * @param string|null $relationshipName\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function orWhereAttachedTo($related, $relationshipName = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereAttachedTo($related, $relationshipName);\n }\n\n /**\n * Add subselect queries to include an aggregate value for a relationship.\n *\n * @param mixed $relations\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string|null $function\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAggregate($relations, $column, $function = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAggregate($relations, $column, $function);\n }\n\n /**\n * Add subselect queries to count the relations.\n *\n * @param mixed $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withCount($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withCount($relations);\n }\n\n /**\n * Add subselect queries to include the max of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withMax($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withMax($relation, $column);\n }\n\n /**\n * Add subselect queries to include the min of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withMin($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withMin($relation, $column);\n }\n\n /**\n * Add subselect queries to include the sum of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withSum($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withSum($relation, $column);\n }\n\n /**\n * Add subselect queries to include the average of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAvg($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAvg($relation, $column);\n }\n\n /**\n * Add subselect queries to include the existence of related models.\n *\n * @param string|array $relation\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withExists($relation)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withExists($relation);\n }\n\n /**\n * Merge the where constraints from another query to the current query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Builder<*> $from\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeConstraintsFrom($from)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->mergeConstraintsFrom($from);\n }\n\n /**\n * Set the columns to be selected.\n *\n * @param mixed $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function select($columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->select($columns);\n }\n\n /**\n * Add a subselect expression to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function selectSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->selectSub($query, $as);\n }\n\n /**\n * Add a new \"raw\" select expression to the query.\n *\n * @param string $expression\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function selectRaw($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->selectRaw($expression, $bindings);\n }\n\n /**\n * Makes \"from\" fetch from a subquery.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function fromSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->fromSub($query, $as);\n }\n\n /**\n * Add a raw from clause to the query.\n *\n * @param string $expression\n * @param mixed $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function fromRaw($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->fromRaw($expression, $bindings);\n }\n\n /**\n * Add a new select column to the query.\n *\n * @param mixed $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addSelect($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addSelect($column);\n }\n\n /**\n * Force the query to only return distinct results.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function distinct()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->distinct();\n }\n\n /**\n * Set the table which the query is targeting.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param string|null $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function from($table, $as = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->from($table, $as);\n }\n\n /**\n * Add an index hint to suggest a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function useIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->useIndex($index);\n }\n\n /**\n * Add an index hint to force a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forceIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forceIndex($index);\n }\n\n /**\n * Add an index hint to ignore a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function ignoreIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->ignoreIndex($index);\n }\n\n /**\n * Add a join clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @param string $type\n * @param bool $where\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->join($table, $first, $operator, $second, $type, $where);\n }\n\n /**\n * Add a \"join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $second\n * @param string $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function joinWhere($table, $first, $operator, $second, $type = 'inner')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinWhere($table, $first, $operator, $second, $type);\n }\n\n /**\n * Add a subquery join clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @param string $type\n * @param bool $where\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function joinSub($query, $as, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinSub($query, $as, $first, $operator, $second, $type, $where);\n }\n\n /**\n * Add a lateral join clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function joinLateral($query, $as, $type = 'inner')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinLateral($query, $as, $type);\n }\n\n /**\n * Add a lateral left join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinLateral($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinLateral($query, $as);\n }\n\n /**\n * Add a left join to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoin($table, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a \"join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinWhere($table, $first, $operator, $second)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinWhere($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery left join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinSub($query, $as, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinSub($query, $as, $first, $operator, $second);\n }\n\n /**\n * Add a right join to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoin($table, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a \"right join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoinWhere($table, $first, $operator, $second)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoinWhere($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery right join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoinSub($query, $as, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoinSub($query, $as, $first, $operator, $second);\n }\n\n /**\n * Add a \"cross join\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function crossJoin($table, $first = null, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->crossJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery cross join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function crossJoinSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->crossJoinSub($query, $as);\n }\n\n /**\n * Merge an array of where clauses and bindings.\n *\n * @param array $wheres\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeWheres($wheres, $bindings)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->mergeWheres($wheres, $bindings);\n }\n\n /**\n * Prepare the value and operator for a where clause.\n *\n * @param string $value\n * @param string $operator\n * @param bool $useDefault\n * @return array\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function prepareValueAndOperator($value, $operator, $useDefault = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->prepareValueAndOperator($value, $operator, $useDefault);\n }\n\n /**\n * Add a \"where\" clause comparing two columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|array $first\n * @param string|null $operator\n * @param string|null $second\n * @param string|null $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereColumn($first, $operator = null, $second = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereColumn($first, $operator, $second, $boolean);\n }\n\n /**\n * Add an \"or where\" clause comparing two columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|array $first\n * @param string|null $operator\n * @param string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereColumn($first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereColumn($first, $operator, $second);\n }\n\n /**\n * Add a raw where clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $sql\n * @param mixed $bindings\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereRaw($sql, $bindings = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereRaw($sql, $bindings, $boolean);\n }\n\n /**\n * Add a raw or where clause to the query.\n *\n * @param string $sql\n * @param mixed $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereRaw($sql, $bindings);\n }\n\n /**\n * Add a \"where like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereLike($column, $value, $caseSensitive = false, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereLike($column, $value, $caseSensitive, $boolean, $not);\n }\n\n /**\n * Add an \"or where like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereLike($column, $value, $caseSensitive = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereLike($column, $value, $caseSensitive);\n }\n\n /**\n * Add a \"where not like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotLike($column, $value, $caseSensitive = false, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotLike($column, $value, $caseSensitive, $boolean);\n }\n\n /**\n * Add an \"or where not like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotLike($column, $value, $caseSensitive = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotLike($column, $value, $caseSensitive);\n }\n\n /**\n * Add a \"where in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIn($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIn($column, $values, $boolean, $not);\n }\n\n /**\n * Add an \"or where in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIn($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIn($column, $values);\n }\n\n /**\n * Add a \"where not in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotIn($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotIn($column, $values, $boolean);\n }\n\n /**\n * Add an \"or where not in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotIn($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotIn($column, $values);\n }\n\n /**\n * Add a \"where in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIntegerInRaw($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIntegerInRaw($column, $values, $boolean, $not);\n }\n\n /**\n * Add an \"or where in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIntegerInRaw($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIntegerInRaw($column, $values);\n }\n\n /**\n * Add a \"where not in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIntegerNotInRaw($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIntegerNotInRaw($column, $values, $boolean);\n }\n\n /**\n * Add an \"or where not in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIntegerNotInRaw($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIntegerNotInRaw($column, $values);\n }\n\n /**\n * Add a \"where null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNull($columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNull($columns, $boolean, $not);\n }\n\n /**\n * Add an \"or where null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNull($column);\n }\n\n /**\n * Add a \"where not null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotNull($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotNull($columns, $boolean);\n }\n\n /**\n * Add a where between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBetween($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBetween($column, $values, $boolean, $not);\n }\n\n /**\n * Add a where between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBetweenColumns($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBetweenColumns($column, $values, $boolean, $not);\n }\n\n /**\n * Add an or where between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBetween($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBetween($column, $values);\n }\n\n /**\n * Add an or where between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBetweenColumns($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBetweenColumns($column, $values);\n }\n\n /**\n * Add a where not between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotBetween($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotBetween($column, $values, $boolean);\n }\n\n /**\n * Add a where not between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotBetweenColumns($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotBetweenColumns($column, $values, $boolean);\n }\n\n /**\n * Add an or where not between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotBetween($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotBetween($column, $values);\n }\n\n /**\n * Add an or where not between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotBetweenColumns($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotBetweenColumns($column, $values);\n }\n\n /**\n * Add a where between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereValueBetween($value, $columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereValueBetween($value, $columns, $boolean, $not);\n }\n\n /**\n * Add an or where between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereValueBetween($value, $columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereValueBetween($value, $columns);\n }\n\n /**\n * Add a where not between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereValueNotBetween($value, $columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereValueNotBetween($value, $columns, $boolean);\n }\n\n /**\n * Add an or where not between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereValueNotBetween($value, $columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereValueNotBetween($value, $columns);\n }\n\n /**\n * Add an \"or where not null\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotNull($column);\n }\n\n /**\n * Add a \"where date\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDate($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereDate($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where date\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDate($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereDate($column, $operator, $value);\n }\n\n /**\n * Add a \"where time\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTime($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTime($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where time\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTime($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTime($column, $operator, $value);\n }\n\n /**\n * Add a \"where day\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDay($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereDay($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where day\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDay($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereDay($column, $operator, $value);\n }\n\n /**\n * Add a \"where month\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMonth($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereMonth($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where month\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMonth($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereMonth($column, $operator, $value);\n }\n\n /**\n * Add a \"where year\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereYear($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereYear($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where year\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereYear($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereYear($column, $operator, $value);\n }\n\n /**\n * Add a nested where statement to the query.\n *\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNested($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNested($callback, $boolean);\n }\n\n /**\n * Create a new query instance for nested where condition.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function forNestedWhere()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forNestedWhere();\n }\n\n /**\n * Add another query builder as a nested where to the query builder.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addNestedWhereQuery($query, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addNestedWhereQuery($query, $boolean);\n }\n\n /**\n * Add an exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereExists($callback, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereExists($callback, $boolean, $not);\n }\n\n /**\n * Add an or exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereExists($callback, $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereExists($callback, $not);\n }\n\n /**\n * Add a where not exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotExists($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotExists($callback, $boolean);\n }\n\n /**\n * Add a where not exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotExists($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotExists($callback);\n }\n\n /**\n * Add an exists clause to the query.\n *\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addWhereExistsQuery($query, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addWhereExistsQuery($query, $boolean, $not);\n }\n\n /**\n * Adds a where condition using row values.\n *\n * @param array $columns\n * @param string $operator\n * @param array $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function whereRowValues($columns, $operator, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereRowValues($columns, $operator, $values, $boolean);\n }\n\n /**\n * Adds an or where condition using row values.\n *\n * @param array $columns\n * @param string $operator\n * @param array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRowValues($columns, $operator, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereRowValues($columns, $operator, $values);\n }\n\n /**\n * Add a \"where JSON contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonContains($column, $value, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonContains($column, $value, $boolean, $not);\n }\n\n /**\n * Add an \"or where JSON contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonContains($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonContains($column, $value);\n }\n\n /**\n * Add a \"where JSON not contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntContain($column, $value, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntContain($column, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON not contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntContain($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntContain($column, $value);\n }\n\n /**\n * Add a \"where JSON overlaps\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonOverlaps($column, $value, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonOverlaps($column, $value, $boolean, $not);\n }\n\n /**\n * Add an \"or where JSON overlaps\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonOverlaps($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonOverlaps($column, $value);\n }\n\n /**\n * Add a \"where JSON not overlap\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntOverlap($column, $value, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntOverlap($column, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON not overlap\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntOverlap($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntOverlap($column, $value);\n }\n\n /**\n * Add a clause that determines if a JSON path exists to the query.\n *\n * @param string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonContainsKey($column, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonContainsKey($column, $boolean, $not);\n }\n\n /**\n * Add an \"or\" clause that determines if a JSON path exists to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonContainsKey($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonContainsKey($column);\n }\n\n /**\n * Add a clause that determines if a JSON path does not exist to the query.\n *\n * @param string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntContainKey($column, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntContainKey($column, $boolean);\n }\n\n /**\n * Add an \"or\" clause that determines if a JSON path does not exist to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntContainKey($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntContainKey($column);\n }\n\n /**\n * Add a \"where JSON length\" clause to the query.\n *\n * @param string $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonLength($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonLength($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON length\" clause to the query.\n *\n * @param string $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonLength($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonLength($column, $operator, $value);\n }\n\n /**\n * Handles dynamic \"where\" clauses to the query.\n *\n * @param string $method\n * @param array $parameters\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dynamicWhere($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dynamicWhere($method, $parameters);\n }\n\n /**\n * Add a \"where fulltext\" clause to the query.\n *\n * @param string|string[] $columns\n * @param string $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereFullText($columns, $value, $options = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereFullText($columns, $value, $options, $boolean);\n }\n\n /**\n * Add a \"or where fulltext\" clause to the query.\n *\n * @param string|string[] $columns\n * @param string $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereFullText($columns, $value, $options = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereFullText($columns, $value, $options);\n }\n\n /**\n * Add a \"where\" clause to the query for multiple columns with \"and\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAll($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAll($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query for multiple columns with \"and\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAll($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAll($columns, $operator, $value);\n }\n\n /**\n * Add a \"where\" clause to the query for multiple columns with \"or\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAny($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAny($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query for multiple columns with \"or\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAny($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAny($columns, $operator, $value);\n }\n\n /**\n * Add a \"where not\" clause to the query for multiple columns where none of the conditions should be true.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNone($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNone($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where not\" clause to the query for multiple columns where none of the conditions should be true.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNone($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNone($columns, $operator, $value);\n }\n\n /**\n * Add a \"group by\" clause to the query.\n *\n * @param array|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $groups\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupBy(...$groups)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupBy(...$groups);\n }\n\n /**\n * Add a raw groupBy clause to the query.\n *\n * @param string $sql\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupByRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupByRaw($sql, $bindings);\n }\n\n /**\n * Add a \"having\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\Closure|string $column\n * @param \\DateTimeInterface|string|int|float|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\DateTimeInterface|string|int|float|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function having($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->having($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or having\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\Closure|string $column\n * @param \\DateTimeInterface|string|int|float|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\DateTimeInterface|string|int|float|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHaving($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHaving($column, $operator, $value);\n }\n\n /**\n * Add a nested having statement to the query.\n *\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNested($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNested($callback, $boolean);\n }\n\n /**\n * Add another query builder as a nested having to the query builder.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addNestedHavingQuery($query, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addNestedHavingQuery($query, $boolean);\n }\n\n /**\n * Add a \"having null\" clause to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNull($columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNull($columns, $boolean, $not);\n }\n\n /**\n * Add an \"or having null\" clause to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingNull($column);\n }\n\n /**\n * Add a \"having not null\" clause to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNotNull($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNotNull($columns, $boolean);\n }\n\n /**\n * Add an \"or having not null\" clause to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingNotNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingNotNull($column);\n }\n\n /**\n * Add a \"having between \" clause to the query.\n *\n * @param string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingBetween($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingBetween($column, $values, $boolean, $not);\n }\n\n /**\n * Add a raw having clause to the query.\n *\n * @param string $sql\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingRaw($sql, $bindings = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingRaw($sql, $bindings, $boolean);\n }\n\n /**\n * Add a raw or having clause to the query.\n *\n * @param string $sql\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingRaw($sql, $bindings);\n }\n\n /**\n * Add an \"order by\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $direction\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function orderBy($column, $direction = 'asc')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderBy($column, $direction);\n }\n\n /**\n * Add a descending \"order by\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orderByDesc($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderByDesc($column);\n }\n\n /**\n * Put the query's results in random order.\n *\n * @param string|int $seed\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function inRandomOrder($seed = '')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->inRandomOrder($seed);\n }\n\n /**\n * Add a raw \"order by\" clause to the query.\n *\n * @param string $sql\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orderByRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderByRaw($sql, $bindings);\n }\n\n /**\n * Alias to set the \"offset\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function skip($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->skip($value);\n }\n\n /**\n * Set the \"offset\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function offset($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->offset($value);\n }\n\n /**\n * Alias to set the \"limit\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function take($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->take($value);\n }\n\n /**\n * Set the \"limit\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function limit($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->limit($value);\n }\n\n /**\n * Add a \"group limit\" clause to the query.\n *\n * @param int $value\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupLimit($value, $column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupLimit($value, $column);\n }\n\n /**\n * Set the limit and offset for a given page.\n *\n * @param int $page\n * @param int $perPage\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPage($page, $perPage = 15)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPage($page, $perPage);\n }\n\n /**\n * Constrain the query to the previous \"page\" of results before a given ID.\n *\n * @param int $perPage\n * @param int|null $lastId\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPageBeforeId($perPage = 15, $lastId = 0, $column = 'id')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPageBeforeId($perPage, $lastId, $column);\n }\n\n /**\n * Constrain the query to the next \"page\" of results after a given ID.\n *\n * @param int $perPage\n * @param int|null $lastId\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPageAfterId($perPage = 15, $lastId = 0, $column = 'id')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPageAfterId($perPage, $lastId, $column);\n }\n\n /**\n * Remove all existing orders and optionally add a new order.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $column\n * @param string $direction\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function reorder($column = null, $direction = 'asc')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->reorder($column, $direction);\n }\n\n /**\n * Add descending \"reorder\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function reorderDesc($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->reorderDesc($column);\n }\n\n /**\n * Add a union statement to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $query\n * @param bool $all\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function union($query, $all = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->union($query, $all);\n }\n\n /**\n * Add a union all statement to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function unionAll($query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->unionAll($query);\n }\n\n /**\n * Lock the selected rows in the table.\n *\n * @param string|bool $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function lock($value = true)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->lock($value);\n }\n\n /**\n * Lock the selected rows in the table for updating.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function lockForUpdate()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->lockForUpdate();\n }\n\n /**\n * Share lock the selected rows in the table.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function sharedLock()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->sharedLock();\n }\n\n /**\n * Register a closure to be invoked before the query is executed.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function beforeQuery($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->beforeQuery($callback);\n }\n\n /**\n * Invoke the \"before query\" modification callbacks.\n *\n * @return void\n * @static\n */\n public static function applyBeforeQueryCallbacks()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n $instance->applyBeforeQueryCallbacks();\n }\n\n /**\n * Get the SQL representation of the query.\n *\n * @return string\n * @static\n */\n public static function toSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->toSql();\n }\n\n /**\n * Get the raw SQL representation of the query with embedded bindings.\n *\n * @return string\n * @static\n */\n public static function toRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->toRawSql();\n }\n\n /**\n * Get a single expression value from the first result of a query.\n *\n * @return mixed\n * @static\n */\n public static function rawValue($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rawValue($expression, $bindings);\n }\n\n /**\n * Get the count of the total records for the paginator.\n *\n * @param array<string|\\Illuminate\\Contracts\\Database\\Query\\Expression> $columns\n * @return int<0, max>\n * @static\n */\n public static function getCountForPagination($columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getCountForPagination($columns);\n }\n\n /**\n * Concatenate values of a given column as a string.\n *\n * @param string $column\n * @param string $glue\n * @return string\n * @static\n */\n public static function implode($column, $glue = '')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->implode($column, $glue);\n }\n\n /**\n * Determine if any rows exist for the current query.\n *\n * @return bool\n * @static\n */\n public static function exists()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->exists();\n }\n\n /**\n * Determine if no rows exist for the current query.\n *\n * @return bool\n * @static\n */\n public static function doesntExist()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->doesntExist();\n }\n\n /**\n * Execute the given callback if no rows exist for the current query.\n *\n * @return mixed\n * @static\n */\n public static function existsOr($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->existsOr($callback);\n }\n\n /**\n * Execute the given callback if rows exist for the current query.\n *\n * @return mixed\n * @static\n */\n public static function doesntExistOr($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->doesntExistOr($callback);\n }\n\n /**\n * Retrieve the \"count\" result of the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $columns\n * @return int<0, max>\n * @static\n */\n public static function count($columns = '*')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->count($columns);\n }\n\n /**\n * Retrieve the minimum value of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function min($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->min($column);\n }\n\n /**\n * Retrieve the maximum value of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function max($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->max($column);\n }\n\n /**\n * Retrieve the sum of the values of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function sum($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->sum($column);\n }\n\n /**\n * Retrieve the average of the values of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function avg($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->avg($column);\n }\n\n /**\n * Alias for the \"avg\" method.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function average($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->average($column);\n }\n\n /**\n * Execute an aggregate function on the database.\n *\n * @param string $function\n * @param array $columns\n * @return mixed\n * @static\n */\n public static function aggregate($function, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->aggregate($function, $columns);\n }\n\n /**\n * Execute a numeric aggregate function on the database.\n *\n * @param string $function\n * @param array $columns\n * @return float|int\n * @static\n */\n public static function numericAggregate($function, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->numericAggregate($function, $columns);\n }\n\n /**\n * Insert new records into the database.\n *\n * @return bool\n * @static\n */\n public static function insert($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insert($values);\n }\n\n /**\n * Insert new records into the database while ignoring errors.\n *\n * @return int<0, max>\n * @static\n */\n public static function insertOrIgnore($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertOrIgnore($values);\n }\n\n /**\n * Insert a new record and get the value of the primary key.\n *\n * @param string|null $sequence\n * @return int\n * @static\n */\n public static function insertGetId($values, $sequence = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertGetId($values, $sequence);\n }\n\n /**\n * Insert new records into the table using a subquery.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return int\n * @static\n */\n public static function insertUsing($columns, $query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertUsing($columns, $query);\n }\n\n /**\n * Insert new records into the table using a subquery while ignoring errors.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return int\n * @static\n */\n public static function insertOrIgnoreUsing($columns, $query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertOrIgnoreUsing($columns, $query);\n }\n\n /**\n * Update records in a PostgreSQL database using the update from syntax.\n *\n * @return int\n * @static\n */\n public static function updateFrom($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->updateFrom($values);\n }\n\n /**\n * Insert or update a record matching the attributes, and fill it with values.\n *\n * @return bool\n * @static\n */\n public static function updateOrInsert($attributes, $values = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->updateOrInsert($attributes, $values);\n }\n\n /**\n * Increment the given column's values by the given amounts.\n *\n * @param array<string, float|int|numeric-string> $columns\n * @param array<string, mixed> $extra\n * @return int<0, max>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function incrementEach($columns, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->incrementEach($columns, $extra);\n }\n\n /**\n * Decrement the given column's values by the given amounts.\n *\n * @param array<string, float|int|numeric-string> $columns\n * @param array<string, mixed> $extra\n * @return int<0, max>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function decrementEach($columns, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->decrementEach($columns, $extra);\n }\n\n /**\n * Run a truncate statement on the table.\n *\n * @return void\n * @static\n */\n public static function truncate()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n $instance->truncate();\n }\n\n /**\n * Get all of the query builder's columns in a text-only array with all expressions evaluated.\n *\n * @return list<string>\n * @static\n */\n public static function getColumns()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getColumns();\n }\n\n /**\n * Create a raw database expression.\n *\n * @param mixed $value\n * @return \\Illuminate\\Contracts\\Database\\Query\\Expression\n * @static\n */\n public static function raw($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->raw($value);\n }\n\n /**\n * Get the current query value bindings in a flattened array.\n *\n * @return list<mixed>\n * @static\n */\n public static function getBindings()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getBindings();\n }\n\n /**\n * Get the raw array of bindings.\n *\n * @return \\Illuminate\\Database\\Query\\array{ select: list<mixed>,\n * from: list<mixed>,\n * join: list<mixed>,\n * where: list<mixed>,\n * groupBy: list<mixed>,\n * having: list<mixed>,\n * order: list<mixed>,\n * union: list<mixed>,\n * unionOrder: list<mixed>,\n * }\n * @static\n */\n public static function getRawBindings()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getRawBindings();\n }\n\n /**\n * Set the bindings on the query builder.\n *\n * @param list<mixed> $bindings\n * @param \"select\"|\"from\"|\"join\"|\"where\"|\"groupBy\"|\"having\"|\"order\"|\"union\"|\"unionOrder\" $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function setBindings($bindings, $type = 'where')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->setBindings($bindings, $type);\n }\n\n /**\n * Add a binding to the query.\n *\n * @param mixed $value\n * @param \"select\"|\"from\"|\"join\"|\"where\"|\"groupBy\"|\"having\"|\"order\"|\"union\"|\"unionOrder\" $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function addBinding($value, $type = 'where')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addBinding($value, $type);\n }\n\n /**\n * Cast the given binding value.\n *\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function castBinding($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->castBinding($value);\n }\n\n /**\n * Merge an array of bindings into our bindings.\n *\n * @param self $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeBindings($query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->mergeBindings($query);\n }\n\n /**\n * Remove all of the expressions from a list of bindings.\n *\n * @param array<mixed> $bindings\n * @return list<mixed>\n * @static\n */\n public static function cleanBindings($bindings)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cleanBindings($bindings);\n }\n\n /**\n * Get the database query processor instance.\n *\n * @return \\Illuminate\\Database\\Query\\Processors\\Processor\n * @static\n */\n public static function getProcessor()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getProcessor();\n }\n\n /**\n * Get the query grammar instance.\n *\n * @return \\Illuminate\\Database\\Query\\Grammars\\Grammar\n * @static\n */\n public static function getGrammar()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getGrammar();\n }\n\n /**\n * Use the \"write\" PDO connection when executing the query.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function useWritePdo()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->useWritePdo();\n }\n\n /**\n * Clone the query without the given properties.\n *\n * @return static\n * @static\n */\n public static function cloneWithout($properties)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cloneWithout($properties);\n }\n\n /**\n * Clone the query without the given bindings.\n *\n * @return static\n * @static\n */\n public static function cloneWithoutBindings($except)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cloneWithoutBindings($except);\n }\n\n /**\n * Dump the current SQL and bindings.\n *\n * @param mixed $args\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dump(...$args)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dump(...$args);\n }\n\n /**\n * Dump the raw current SQL with embedded bindings.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dumpRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dumpRawSql();\n }\n\n /**\n * Die and dump the current SQL and bindings.\n *\n * @return never\n * @static\n */\n public static function dd()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dd();\n }\n\n /**\n * Die and dump the current SQL with embedded bindings.\n *\n * @return never\n * @static\n */\n public static function ddRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->ddRawSql();\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function wherePast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->wherePast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNowOrPast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNowOrPast($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the past to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWherePast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWherePast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNowOrPast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNowOrPast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the future to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereFuture($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the future or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNowOrFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNowOrFuture($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the future to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereFuture($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the future or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNowOrFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNowOrFuture($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereToday($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereToday($columns, $boolean);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is before today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBeforeToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBeforeToday($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today or before to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTodayOrBefore($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTodayOrBefore($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is after today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAfterToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAfterToday($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today or after to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTodayOrAfter($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTodayOrAfter($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is before today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBeforeToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBeforeToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today or before to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTodayOrBefore($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTodayOrBefore($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is after today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAfterToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAfterToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today or after to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTodayOrAfter($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTodayOrAfter($columns);\n }\n\n /**\n * Explains the query.\n *\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function explain()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->explain();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Database\\Query\\Builder::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Database\\Query\\Builder::mixin($mixin, $replace);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Database\\Query\\Builder::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n}\n class Event extends \\Illuminate\\Support\\Facades\\Event {}\n class File extends \\Illuminate\\Support\\Facades\\File {}\n class Gate extends \\Illuminate\\Support\\Facades\\Gate {}\n class Hash extends \\Illuminate\\Support\\Facades\\Hash {}\n class Http extends \\Illuminate\\Support\\Facades\\Http {}\n class Js extends \\Illuminate\\Support\\Js {}\n class Lang extends \\Illuminate\\Support\\Facades\\Lang {}\n class Log extends \\Illuminate\\Support\\Facades\\Log {}\n class Mail extends \\Illuminate\\Support\\Facades\\Mail {}\n class Notification extends \\Illuminate\\Support\\Facades\\Notification {}\n class Number extends \\Illuminate\\Support\\Number {}\n class Password extends \\Illuminate\\Support\\Facades\\Password {}\n class Process extends \\Illuminate\\Support\\Facades\\Process {}\n class Queue extends \\Illuminate\\Support\\Facades\\Queue {}\n class RateLimiter extends \\Illuminate\\Support\\Facades\\RateLimiter {}\n class Redirect extends \\Illuminate\\Support\\Facades\\Redirect {}\n class Request extends \\Illuminate\\Support\\Facades\\Request {}\n class Response extends \\Illuminate\\Support\\Facades\\Response {}\n class Route extends \\Illuminate\\Support\\Facades\\Route {}\n class Schedule extends \\Illuminate\\Support\\Facades\\Schedule {}\n class Schema extends \\Illuminate\\Support\\Facades\\Schema {}\n class Session extends \\Illuminate\\Support\\Facades\\Session {}\n class Storage extends \\Illuminate\\Support\\Facades\\Storage {}\n class Str extends \\Illuminate\\Support\\Str {}\n class Uri extends \\Illuminate\\Support\\Uri {}\n class URL extends \\Illuminate\\Support\\Facades\\URL {}\n class Validator extends \\Illuminate\\Support\\Facades\\Validator {}\n class View extends \\Illuminate\\Support\\Facades\\View {}\n class Vite extends \\Illuminate\\Support\\Facades\\Vite {}\n class AWS extends \\Aws\\Laravel\\AwsFacade {}\n class Avatar extends \\Laravolt\\Avatar\\Facade {}\n class Fractal extends \\Spatie\\Fractal\\Facades\\Fractal {}\n class Laratrust extends \\Laratrust\\LaratrustFacade {}\n class RedisManager extends \\Illuminate\\Support\\Facades\\Redis {}\n class Sentry extends \\Sentry\\Laravel\\Facade {}\n class Statsd extends \\League\\StatsD\\Laravel5\\Facade\\StatsdFacade {}\n class Debugbar extends \\Barryvdh\\Debugbar\\Facades\\Debugbar {}\n class PDF extends \\Barryvdh\\DomPDF\\Facade\\Pdf {}\n class Pdf extends \\Barryvdh\\DomPDF\\Facade\\Pdf {}\n class Datadog extends \\ChaseConey\\LaravelDatadogHelper\\Datadog {}\n class Flare extends \\Spatie\\LaravelIgnition\\Facades\\Flare {}\n class Hashids extends \\Vinkla\\Hashids\\Facades\\Hashids {}\n}","depth":4,"bounds":{"left":0.12699468,"top":0.1963288,"width":0.6402925,"height":0.8036712},"on_screen":true,"value":"<?php\n/* @noinspection ALL */\n// @formatter:off\n// phpcs:ignoreFile\n\n/**\n * A helper file for Laravel, to provide autocomplete information to your IDE\n * Generated for Laravel 12.33.0.\n *\n * This file should not be included in your code, only analyzed by your IDE!\n *\n * @author Barry vd. Heuvel <barryvdh@gmail.com>\n * @see https://github.com/barryvdh/laravel-ide-helper\n */\nnamespace Illuminate\\Support\\Facades {\n /**\n * @see \\Illuminate\\Foundation\\Application\n */\n class App {\n /**\n * Begin configuring a new Laravel application instance.\n *\n * @param string|null $basePath\n * @return \\Illuminate\\Foundation\\Configuration\\ApplicationBuilder\n * @static\n */\n public static function configure($basePath = null)\n {\n return \\Illuminate\\Foundation\\Application::configure($basePath);\n }\n\n /**\n * Infer the application's base directory from the environment.\n *\n * @return string\n * @static\n */\n public static function inferBasePath()\n {\n return \\Illuminate\\Foundation\\Application::inferBasePath();\n }\n\n /**\n * Get the version number of the application.\n *\n * @return string\n * @static\n */\n public static function version()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->version();\n }\n\n /**\n * Run the given array of bootstrap classes.\n *\n * @param string[] $bootstrappers\n * @return void\n * @static\n */\n public static function bootstrapWith($bootstrappers)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bootstrapWith($bootstrappers);\n }\n\n /**\n * Register a callback to run after loading the environment.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterLoadingEnvironment($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterLoadingEnvironment($callback);\n }\n\n /**\n * Register a callback to run before a bootstrapper.\n *\n * @param string $bootstrapper\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function beforeBootstrapping($bootstrapper, $callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->beforeBootstrapping($bootstrapper, $callback);\n }\n\n /**\n * Register a callback to run after a bootstrapper.\n *\n * @param string $bootstrapper\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterBootstrapping($bootstrapper, $callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterBootstrapping($bootstrapper, $callback);\n }\n\n /**\n * Determine if the application has been bootstrapped before.\n *\n * @return bool\n * @static\n */\n public static function hasBeenBootstrapped()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasBeenBootstrapped();\n }\n\n /**\n * Set the base path for the application.\n *\n * @param string $basePath\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function setBasePath($basePath)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->setBasePath($basePath);\n }\n\n /**\n * Get the path to the application \"app\" directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function path($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->path($path);\n }\n\n /**\n * Set the application directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useAppPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useAppPath($path);\n }\n\n /**\n * Get the base path of the Laravel installation.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function basePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->basePath($path);\n }\n\n /**\n * Get the path to the bootstrap directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function bootstrapPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->bootstrapPath($path);\n }\n\n /**\n * Get the path to the service provider list in the bootstrap directory.\n *\n * @return string\n * @static\n */\n public static function getBootstrapProvidersPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getBootstrapProvidersPath();\n }\n\n /**\n * Set the bootstrap file directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useBootstrapPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useBootstrapPath($path);\n }\n\n /**\n * Get the path to the application configuration files.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function configPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->configPath($path);\n }\n\n /**\n * Set the configuration directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useConfigPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useConfigPath($path);\n }\n\n /**\n * Get the path to the database directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function databasePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->databasePath($path);\n }\n\n /**\n * Set the database directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useDatabasePath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useDatabasePath($path);\n }\n\n /**\n * Get the path to the language files.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function langPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->langPath($path);\n }\n\n /**\n * Set the language file directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useLangPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useLangPath($path);\n }\n\n /**\n * Get the path to the public / web directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function publicPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->publicPath($path);\n }\n\n /**\n * Set the public / web directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function usePublicPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->usePublicPath($path);\n }\n\n /**\n * Get the path to the storage directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function storagePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->storagePath($path);\n }\n\n /**\n * Set the storage directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useStoragePath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useStoragePath($path);\n }\n\n /**\n * Get the path to the resources directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function resourcePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resourcePath($path);\n }\n\n /**\n * Get the path to the views directory.\n * \n * This method returns the first configured path in the array of view paths.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function viewPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->viewPath($path);\n }\n\n /**\n * Join the given paths together.\n *\n * @param string $basePath\n * @param string $path\n * @return string\n * @static\n */\n public static function joinPaths($basePath, $path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->joinPaths($basePath, $path);\n }\n\n /**\n * Get the path to the environment file directory.\n *\n * @return string\n * @static\n */\n public static function environmentPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentPath();\n }\n\n /**\n * Set the directory for the environment file.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useEnvironmentPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useEnvironmentPath($path);\n }\n\n /**\n * Set the environment file to be loaded during bootstrapping.\n *\n * @param string $file\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function loadEnvironmentFrom($file)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->loadEnvironmentFrom($file);\n }\n\n /**\n * Get the environment file the application is using.\n *\n * @return string\n * @static\n */\n public static function environmentFile()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentFile();\n }\n\n /**\n * Get the fully qualified path to the environment file.\n *\n * @return string\n * @static\n */\n public static function environmentFilePath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentFilePath();\n }\n\n /**\n * Get or check the current application environment.\n *\n * @param string|array $environments\n * @return string|bool\n * @static\n */\n public static function environment(...$environments)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environment(...$environments);\n }\n\n /**\n * Determine if the application is in the local environment.\n *\n * @return bool\n * @static\n */\n public static function isLocal()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isLocal();\n }\n\n /**\n * Determine if the application is in the production environment.\n *\n * @return bool\n * @static\n */\n public static function isProduction()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isProduction();\n }\n\n /**\n * Detect the application's current environment.\n *\n * @param \\Closure $callback\n * @return string\n * @static\n */\n public static function detectEnvironment($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->detectEnvironment($callback);\n }\n\n /**\n * Determine if the application is running in the console.\n *\n * @return bool\n * @static\n */\n public static function runningInConsole()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningInConsole();\n }\n\n /**\n * Determine if the application is running any of the given console commands.\n *\n * @param string|array $commands\n * @return bool\n * @static\n */\n public static function runningConsoleCommand(...$commands)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningConsoleCommand(...$commands);\n }\n\n /**\n * Determine if the application is running unit tests.\n *\n * @return bool\n * @static\n */\n public static function runningUnitTests()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningUnitTests();\n }\n\n /**\n * Determine if the application is running with debug mode enabled.\n *\n * @return bool\n * @static\n */\n public static function hasDebugModeEnabled()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasDebugModeEnabled();\n }\n\n /**\n * Register a new registered listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function registered($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registered($callback);\n }\n\n /**\n * Register all of the configured providers.\n *\n * @return void\n * @static\n */\n public static function registerConfiguredProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerConfiguredProviders();\n }\n\n /**\n * Register a service provider with the application.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @param bool $force\n * @return \\Illuminate\\Support\\ServiceProvider\n * @static\n */\n public static function register($provider, $force = false)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->register($provider, $force);\n }\n\n /**\n * Get the registered service provider instance if it exists.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @return \\Illuminate\\Support\\ServiceProvider|null\n * @static\n */\n public static function getProvider($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getProvider($provider);\n }\n\n /**\n * Get the registered service provider instances if any exist.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @return array\n * @static\n */\n public static function getProviders($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getProviders($provider);\n }\n\n /**\n * Resolve a service provider instance from the class name.\n *\n * @param string $provider\n * @return \\Illuminate\\Support\\ServiceProvider\n * @static\n */\n public static function resolveProvider($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolveProvider($provider);\n }\n\n /**\n * Load and boot all of the remaining deferred providers.\n *\n * @return void\n * @static\n */\n public static function loadDeferredProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->loadDeferredProviders();\n }\n\n /**\n * Load the provider for a deferred service.\n *\n * @param string $service\n * @return void\n * @static\n */\n public static function loadDeferredProvider($service)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->loadDeferredProvider($service);\n }\n\n /**\n * Register a deferred provider and service.\n *\n * @param string $provider\n * @param string|null $service\n * @return void\n * @static\n */\n public static function registerDeferredProvider($provider, $service = null)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerDeferredProvider($provider, $service);\n }\n\n /**\n * Resolve the given type from the container.\n *\n * @template TClass of object\n * @param string|class-string<TClass> $abstract\n * @param array $parameters\n * @return ($abstract is class-string<TClass> ? TClass : mixed)\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function make($abstract, $parameters = [])\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->make($abstract, $parameters);\n }\n\n /**\n * Determine if the given abstract type has been bound.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function bound($abstract)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->bound($abstract);\n }\n\n /**\n * Determine if the application has booted.\n *\n * @return bool\n * @static\n */\n public static function isBooted()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isBooted();\n }\n\n /**\n * Boot the application's service providers.\n *\n * @return void\n * @static\n */\n public static function boot()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->boot();\n }\n\n /**\n * Register a new boot listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function booting($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->booting($callback);\n }\n\n /**\n * Register a new \"booted\" listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function booted($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->booted($callback);\n }\n\n /**\n * {@inheritdoc}\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function handle($request, $type = 1, $catch = true)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->handle($request, $type, $catch);\n }\n\n /**\n * Handle the incoming HTTP request and send the response to the browser.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function handleRequest($request)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->handleRequest($request);\n }\n\n /**\n * Handle the incoming Artisan command.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @return int\n * @static\n */\n public static function handleCommand($input)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->handleCommand($input);\n }\n\n /**\n * Determine if the framework's base configuration should be merged.\n *\n * @return bool\n * @static\n */\n public static function shouldMergeFrameworkConfiguration()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->shouldMergeFrameworkConfiguration();\n }\n\n /**\n * Indicate that the framework's base configuration should not be merged.\n *\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function dontMergeFrameworkConfiguration()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->dontMergeFrameworkConfiguration();\n }\n\n /**\n * Determine if middleware has been disabled for the application.\n *\n * @return bool\n * @static\n */\n public static function shouldSkipMiddleware()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->shouldSkipMiddleware();\n }\n\n /**\n * Get the path to the cached services.php file.\n *\n * @return string\n * @static\n */\n public static function getCachedServicesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedServicesPath();\n }\n\n /**\n * Get the path to the cached packages.php file.\n *\n * @return string\n * @static\n */\n public static function getCachedPackagesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedPackagesPath();\n }\n\n /**\n * Determine if the application configuration is cached.\n *\n * @return bool\n * @static\n */\n public static function configurationIsCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->configurationIsCached();\n }\n\n /**\n * Get the path to the configuration cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedConfigPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedConfigPath();\n }\n\n /**\n * Determine if the application routes are cached.\n *\n * @return bool\n * @static\n */\n public static function routesAreCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->routesAreCached();\n }\n\n /**\n * Get the path to the routes cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedRoutesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedRoutesPath();\n }\n\n /**\n * Determine if the application events are cached.\n *\n * @return bool\n * @static\n */\n public static function eventsAreCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->eventsAreCached();\n }\n\n /**\n * Get the path to the events cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedEventsPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedEventsPath();\n }\n\n /**\n * Add new prefix to list of absolute path prefixes.\n *\n * @param string $prefix\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function addAbsoluteCachePathPrefix($prefix)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->addAbsoluteCachePathPrefix($prefix);\n }\n\n /**\n * Get an instance of the maintenance mode manager implementation.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\MaintenanceMode\n * @static\n */\n public static function maintenanceMode()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->maintenanceMode();\n }\n\n /**\n * Determine if the application is currently down for maintenance.\n *\n * @return bool\n * @static\n */\n public static function isDownForMaintenance()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isDownForMaintenance();\n }\n\n /**\n * Throw an HttpException with the given data.\n *\n * @param int $code\n * @param string $message\n * @param array $headers\n * @return never\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\HttpException\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException\n * @static\n */\n public static function abort($code, $message = '', $headers = [])\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->abort($code, $message, $headers);\n }\n\n /**\n * Register a terminating callback with the application.\n *\n * @param callable|string $callback\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function terminating($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->terminating($callback);\n }\n\n /**\n * Terminate the application.\n *\n * @return void\n * @static\n */\n public static function terminate()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->terminate();\n }\n\n /**\n * Get the service providers that have been loaded.\n *\n * @return array<string, bool>\n * @static\n */\n public static function getLoadedProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getLoadedProviders();\n }\n\n /**\n * Determine if the given service provider is loaded.\n *\n * @param string $provider\n * @return bool\n * @static\n */\n public static function providerIsLoaded($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->providerIsLoaded($provider);\n }\n\n /**\n * Get the application's deferred services.\n *\n * @return array\n * @static\n */\n public static function getDeferredServices()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getDeferredServices();\n }\n\n /**\n * Set the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function setDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setDeferredServices($services);\n }\n\n /**\n * Determine if the given service is a deferred service.\n *\n * @param string $service\n * @return bool\n * @static\n */\n public static function isDeferredService($service)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isDeferredService($service);\n }\n\n /**\n * Add an array of services to the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function addDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->addDeferredServices($services);\n }\n\n /**\n * Remove an array of services from the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function removeDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->removeDeferredServices($services);\n }\n\n /**\n * Configure the real-time facade namespace.\n *\n * @param string $namespace\n * @return void\n * @static\n */\n public static function provideFacades($namespace)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->provideFacades($namespace);\n }\n\n /**\n * Get the current application locale.\n *\n * @return string\n * @static\n */\n public static function getLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getLocale();\n }\n\n /**\n * Get the current application locale.\n *\n * @return string\n * @static\n */\n public static function currentLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentLocale();\n }\n\n /**\n * Get the current application fallback locale.\n *\n * @return string\n * @static\n */\n public static function getFallbackLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getFallbackLocale();\n }\n\n /**\n * Set the current application locale.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setLocale($locale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setLocale($locale);\n }\n\n /**\n * Set the current application fallback locale.\n *\n * @param string $fallbackLocale\n * @return void\n * @static\n */\n public static function setFallbackLocale($fallbackLocale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setFallbackLocale($fallbackLocale);\n }\n\n /**\n * Determine if the application locale is the given locale.\n *\n * @param string $locale\n * @return bool\n * @static\n */\n public static function isLocale($locale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isLocale($locale);\n }\n\n /**\n * Register the core class aliases in the container.\n *\n * @return void\n * @static\n */\n public static function registerCoreContainerAliases()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerCoreContainerAliases();\n }\n\n /**\n * Flush the container of all bindings and resolved instances.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->flush();\n }\n\n /**\n * Get the application namespace.\n *\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function getNamespace()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getNamespace();\n }\n\n /**\n * Define a contextual binding.\n *\n * @param array|string $concrete\n * @return \\Illuminate\\Contracts\\Container\\ContextualBindingBuilder\n * @static\n */\n public static function when($concrete)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->when($concrete);\n }\n\n /**\n * Define a contextual binding based on an attribute.\n *\n * @param string $attribute\n * @param \\Closure $handler\n * @return void\n * @static\n */\n public static function whenHasAttribute($attribute, $handler)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->whenHasAttribute($attribute, $handler);\n }\n\n /**\n * Returns true if the container can return an entry for the given identifier.\n * \n * Returns false otherwise.\n * \n * `has($id)` returning true does not mean that `get($id)` will not throw an exception.\n * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.\n *\n * @return bool\n * @param string $id Identifier of the entry to look for.\n * @return bool\n * @static\n */\n public static function has($id)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->has($id);\n }\n\n /**\n * Determine if the given abstract type has been resolved.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function resolved($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolved($abstract);\n }\n\n /**\n * Determine if a given type is shared.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function isShared($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isShared($abstract);\n }\n\n /**\n * Determine if a given string is an alias.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function isAlias($name)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isAlias($name);\n }\n\n /**\n * Register a binding with the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @param bool $shared\n * @return void\n * @throws \\TypeError\n * @throws ReflectionException\n * @static\n */\n public static function bind($abstract, $concrete = null, $shared = false)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bind($abstract, $concrete, $shared);\n }\n\n /**\n * Determine if the container has a method binding.\n *\n * @param string $method\n * @return bool\n * @static\n */\n public static function hasMethodBinding($method)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasMethodBinding($method);\n }\n\n /**\n * Bind a callback to resolve with Container::call.\n *\n * @param array|string $method\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function bindMethod($method, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bindMethod($method, $callback);\n }\n\n /**\n * Get the method binding for the given method.\n *\n * @param string $method\n * @param mixed $instance\n * @return mixed\n * @static\n */\n public static function callMethodBinding($method, $instance)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->callMethodBinding($method, $instance);\n }\n\n /**\n * Add a contextual binding to the container.\n *\n * @param string $concrete\n * @param \\Closure|string $abstract\n * @param \\Closure|string $implementation\n * @return void\n * @static\n */\n public static function addContextualBinding($concrete, $abstract, $implementation)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->addContextualBinding($concrete, $abstract, $implementation);\n }\n\n /**\n * Register a binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @param bool $shared\n * @return void\n * @static\n */\n public static function bindIf($abstract, $concrete = null, $shared = false)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bindIf($abstract, $concrete, $shared);\n }\n\n /**\n * Register a shared binding in the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function singleton($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->singleton($abstract, $concrete);\n }\n\n /**\n * Register a shared binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function singletonIf($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->singletonIf($abstract, $concrete);\n }\n\n /**\n * Register a scoped binding in the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function scoped($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->scoped($abstract, $concrete);\n }\n\n /**\n * Register a scoped binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function scopedIf($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->scopedIf($abstract, $concrete);\n }\n\n /**\n * \"Extend\" an abstract type in the container.\n *\n * @param string $abstract\n * @param \\Closure $closure\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function extend($abstract, $closure)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->extend($abstract, $closure);\n }\n\n /**\n * Register an existing instance as shared in the container.\n *\n * @template TInstance of mixed\n * @param string $abstract\n * @param TInstance $instance\n * @return TInstance\n * @static\n */\n public static function instance($abstract, $instance)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->instance($abstract, $instance);\n }\n\n /**\n * Assign a set of tags to a given binding.\n *\n * @param array|string $abstracts\n * @param mixed $tags\n * @return void\n * @static\n */\n public static function tag($abstracts, $tags)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->tag($abstracts, $tags);\n }\n\n /**\n * Resolve all of the bindings for a given tag.\n *\n * @param string $tag\n * @return iterable\n * @static\n */\n public static function tagged($tag)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->tagged($tag);\n }\n\n /**\n * Alias a type to a different name.\n *\n * @param string $abstract\n * @param string $alias\n * @return void\n * @throws \\LogicException\n * @static\n */\n public static function alias($abstract, $alias)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->alias($abstract, $alias);\n }\n\n /**\n * Bind a new callback to an abstract's rebind event.\n *\n * @param string $abstract\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function rebinding($abstract, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->rebinding($abstract, $callback);\n }\n\n /**\n * Refresh an instance on the given target and method.\n *\n * @param string $abstract\n * @param mixed $target\n * @param string $method\n * @return mixed\n * @static\n */\n public static function refresh($abstract, $target, $method)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->refresh($abstract, $target, $method);\n }\n\n /**\n * Wrap the given closure such that its dependencies will be injected when executed.\n *\n * @param \\Closure $callback\n * @param array $parameters\n * @return \\Closure\n * @static\n */\n public static function wrap($callback, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->wrap($callback, $parameters);\n }\n\n /**\n * Call the given Closure / class@method and inject its dependencies.\n *\n * @param callable|string $callback\n * @param array<string, mixed> $parameters\n * @param string|null $defaultMethod\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function call($callback, $parameters = [], $defaultMethod = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->call($callback, $parameters, $defaultMethod);\n }\n\n /**\n * Get a closure to resolve the given type from the container.\n *\n * @template TClass of object\n * @param string|class-string<TClass> $abstract\n * @return ($abstract is class-string<TClass> ? \\Closure(): TClass : \\Closure(): mixed)\n * @static\n */\n public static function factory($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->factory($abstract);\n }\n\n /**\n * An alias function name for make().\n *\n * @template TClass of object\n * @param string|class-string<TClass>|callable $abstract\n * @param array $parameters\n * @return ($abstract is class-string<TClass> ? TClass : mixed)\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function makeWith($abstract, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->makeWith($abstract, $parameters);\n }\n\n /**\n * {@inheritdoc}\n *\n * @template TClass of object\n * @param string|class-string<TClass> $id\n * @return ($id is class-string<TClass> ? TClass : mixed)\n * @static\n */\n public static function get($id)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->get($id);\n }\n\n /**\n * Instantiate a concrete instance of the given type.\n *\n * @template TClass of object\n * @param \\Closure(static, array): TClass|class-string<TClass> $concrete\n * @return TClass\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @throws \\Illuminate\\Contracts\\Container\\CircularDependencyException\n * @static\n */\n public static function build($concrete)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->build($concrete);\n }\n\n /**\n * Resolve a dependency based on an attribute.\n *\n * @param \\ReflectionAttribute $attribute\n * @return mixed\n * @static\n */\n public static function resolveFromAttribute($attribute)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolveFromAttribute($attribute);\n }\n\n /**\n * Register a new before resolving callback for all types.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function beforeResolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->beforeResolving($abstract, $callback);\n }\n\n /**\n * Register a new resolving callback.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function resolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->resolving($abstract, $callback);\n }\n\n /**\n * Register a new after resolving callback for all types.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function afterResolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterResolving($abstract, $callback);\n }\n\n /**\n * Register a new after resolving attribute callback for all types.\n *\n * @param string $attribute\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterResolvingAttribute($attribute, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterResolvingAttribute($attribute, $callback);\n }\n\n /**\n * Fire all of the after resolving attribute callbacks.\n *\n * @param \\ReflectionAttribute[] $attributes\n * @param mixed $object\n * @return void\n * @static\n */\n public static function fireAfterResolvingAttributeCallbacks($attributes, $object)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->fireAfterResolvingAttributeCallbacks($attributes, $object);\n }\n\n /**\n * Get the name of the binding the container is currently resolving.\n *\n * @return class-string|string|null\n * @static\n */\n public static function currentlyResolving()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentlyResolving();\n }\n\n /**\n * Get the container's bindings.\n *\n * @return array\n * @static\n */\n public static function getBindings()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getBindings();\n }\n\n /**\n * Get the alias for an abstract if available.\n *\n * @param string $abstract\n * @return string\n * @static\n */\n public static function getAlias($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getAlias($abstract);\n }\n\n /**\n * Remove all of the extender callbacks for a given type.\n *\n * @param string $abstract\n * @return void\n * @static\n */\n public static function forgetExtenders($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetExtenders($abstract);\n }\n\n /**\n * Remove a resolved instance from the instance cache.\n *\n * @param string $abstract\n * @return void\n * @static\n */\n public static function forgetInstance($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetInstance($abstract);\n }\n\n /**\n * Clear all of the instances from the container.\n *\n * @return void\n * @static\n */\n public static function forgetInstances()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetInstances();\n }\n\n /**\n * Clear all of the scoped instances from the container.\n *\n * @return void\n * @static\n */\n public static function forgetScopedInstances()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetScopedInstances();\n }\n\n /**\n * Set the callback which determines the current container environment.\n *\n * @param (callable(array<int, string>|string): bool|string)|null $callback\n * @return void\n * @static\n */\n public static function resolveEnvironmentUsing($callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->resolveEnvironmentUsing($callback);\n }\n\n /**\n * Determine the environment for the container.\n *\n * @param array<int, string>|string $environments\n * @return bool\n * @static\n */\n public static function currentEnvironmentIs($environments)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentEnvironmentIs($environments);\n }\n\n /**\n * Get the globally available instance of the container.\n *\n * @return static\n * @static\n */\n public static function getInstance()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n return \\Illuminate\\Foundation\\Application::getInstance();\n }\n\n /**\n * Set the shared instance of the container.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container|null $container\n * @return \\Illuminate\\Contracts\\Container\\Container|static\n * @static\n */\n public static function setInstance($container = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n return \\Illuminate\\Foundation\\Application::setInstance($container);\n }\n\n /**\n * Determine if a given offset exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Get the value at a given offset.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Set the value at a given offset.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Unset the value at a given offset.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Foundation\\Application::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Foundation\\Application::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Foundation\\Application::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Foundation\\Application::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Foundation\\Console\\Kernel\n */\n class Artisan {\n /**\n * Re-route the Symfony command events to their Laravel counterparts.\n *\n * @internal\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function rerouteSymfonyCommandEvents()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->rerouteSymfonyCommandEvents();\n }\n\n /**\n * Run the console application.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @param \\Symfony\\Component\\Console\\Output\\OutputInterface|null $output\n * @return int\n * @static\n */\n public static function handle($input, $output = null)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->handle($input, $output);\n }\n\n /**\n * Terminate the application.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @param int $status\n * @return void\n * @static\n */\n public static function terminate($input, $status)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->terminate($input, $status);\n }\n\n /**\n * Register a callback to be invoked when the command lifecycle duration exceeds a given amount of time.\n *\n * @param \\DateTimeInterface|\\Carbon\\CarbonInterval|float|int $threshold\n * @param callable $handler\n * @return void\n * @static\n */\n public static function whenCommandLifecycleIsLongerThan($threshold, $handler)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->whenCommandLifecycleIsLongerThan($threshold, $handler);\n }\n\n /**\n * When the command being handled started.\n *\n * @return \\Illuminate\\Support\\Carbon|null\n * @static\n */\n public static function commandStartedAt()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->commandStartedAt();\n }\n\n /**\n * Resolve a console schedule instance.\n *\n * @return \\Illuminate\\Console\\Scheduling\\Schedule\n * @static\n */\n public static function resolveConsoleSchedule()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->resolveConsoleSchedule();\n }\n\n /**\n * Register a Closure based command with the application.\n *\n * @param string $signature\n * @param \\Closure $callback\n * @return \\Illuminate\\Foundation\\Console\\ClosureCommand\n * @static\n */\n public static function command($signature, $callback)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->command($signature, $callback);\n }\n\n /**\n * Register the given command with the console application.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command $command\n * @return void\n * @static\n */\n public static function registerCommand($command)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->registerCommand($command);\n }\n\n /**\n * Run an Artisan console command by name.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command|string $command\n * @param array $parameters\n * @param \\Symfony\\Component\\Console\\Output\\OutputInterface|null $outputBuffer\n * @return int\n * @throws \\Symfony\\Component\\Console\\Exception\\CommandNotFoundException\n * @static\n */\n public static function call($command, $parameters = [], $outputBuffer = null)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->call($command, $parameters, $outputBuffer);\n }\n\n /**\n * Queue the given console command.\n *\n * @param string $command\n * @param array $parameters\n * @return \\Illuminate\\Foundation\\Bus\\PendingDispatch\n * @static\n */\n public static function queue($command, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->queue($command, $parameters);\n }\n\n /**\n * Get all of the commands registered with the console.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->all();\n }\n\n /**\n * Get the output for the last run command.\n *\n * @return string\n * @static\n */\n public static function output()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->output();\n }\n\n /**\n * Bootstrap the application for artisan commands.\n *\n * @return void\n * @static\n */\n public static function bootstrap()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->bootstrap();\n }\n\n /**\n * Bootstrap the application without booting service providers.\n *\n * @return void\n * @static\n */\n public static function bootstrapWithoutBootingProviders()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->bootstrapWithoutBootingProviders();\n }\n\n /**\n * Set the Artisan application instance.\n *\n * @param \\Illuminate\\Console\\Application|null $artisan\n * @return void\n * @static\n */\n public static function setArtisan($artisan)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->setArtisan($artisan);\n }\n\n /**\n * Set the Artisan commands provided by the application.\n *\n * @param array $commands\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommands($commands)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommands($commands);\n }\n\n /**\n * Set the paths that should have their Artisan commands automatically discovered.\n *\n * @param array $paths\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommandPaths($paths)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommandPaths($paths);\n }\n\n /**\n * Set the paths that should have their Artisan \"routes\" automatically discovered.\n *\n * @param array $paths\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommandRoutePaths($paths)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommandRoutePaths($paths);\n }\n\n /**\n * Confirm before proceeding with the action.\n * \n * This method only asks for confirmation in production.\n *\n * @param string $warning\n * @param \\Closure|bool|null $callback\n * @return bool\n * @static\n */\n public static function confirmToProceed($warning = 'Application In Production', $callback = null)\n {\n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->confirmToProceed($warning, $callback);\n }\n\n }\n /**\n * @see \\Illuminate\\Auth\\AuthManager\n * @see \\Illuminate\\Auth\\SessionGuard\n */\n class Auth {\n /**\n * Attempt to get the guard from the local cache.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Auth\\Guard|\\Illuminate\\Contracts\\Auth\\StatefulGuard\n * @static\n */\n public static function guard($name = null)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->guard($name);\n }\n\n /**\n * Create a session based authentication guard.\n *\n * @param string $name\n * @param array $config\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function createSessionDriver($name, $config)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createSessionDriver($name, $config);\n }\n\n /**\n * Create a token based authentication guard.\n *\n * @param string $name\n * @param array $config\n * @return \\Illuminate\\Auth\\TokenGuard\n * @static\n */\n public static function createTokenDriver($name, $config)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createTokenDriver($name, $config);\n }\n\n /**\n * Get the default authentication driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default guard driver the factory should serve.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function shouldUse($name)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n $instance->shouldUse($name);\n }\n\n /**\n * Set the default authentication driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Register a new callback based request guard.\n *\n * @param string $driver\n * @param callable $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function viaRequest($driver, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->viaRequest($driver, $callback);\n }\n\n /**\n * Get the user resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function userResolver()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->userResolver();\n }\n\n /**\n * Set the callback to be used to resolve users.\n *\n * @param \\Closure $userResolver\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function resolveUsersUsing($userResolver)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->resolveUsersUsing($userResolver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Register a custom provider creator Closure.\n *\n * @param string $name\n * @param \\Closure $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function provider($name, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->provider($name, $callback);\n }\n\n /**\n * Determines if any guards have already been resolved.\n *\n * @return bool\n * @static\n */\n public static function hasResolvedGuards()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->hasResolvedGuards();\n }\n\n /**\n * Forget all of the resolved guard instances.\n *\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function forgetGuards()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->forgetGuards();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Create the user provider implementation for the driver.\n *\n * @param string|null $provider\n * @return \\Illuminate\\Contracts\\Auth\\UserProvider|null\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function createUserProvider($provider = null)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createUserProvider($provider);\n }\n\n /**\n * Get the default user provider name.\n *\n * @return string\n * @static\n */\n public static function getDefaultUserProvider()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->getDefaultUserProvider();\n }\n\n /**\n * Get the currently authenticated user.\n *\n * @return \\Jiminny\\Models\\User|null\n * @static\n */\n public static function user()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->user();\n }\n\n /**\n * Get the ID for the currently authenticated user.\n *\n * @return int|string|null\n * @static\n */\n public static function id()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->id();\n }\n\n /**\n * Log a user into the application without sessions or cookies.\n *\n * @param array $credentials\n * @return bool\n * @static\n */\n public static function once($credentials = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->once($credentials);\n }\n\n /**\n * Log the given user ID into the application without sessions or cookies.\n *\n * @param mixed $id\n * @return \\Jiminny\\Models\\User|false\n * @static\n */\n public static function onceUsingId($id)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->onceUsingId($id);\n }\n\n /**\n * Validate a user's credentials.\n *\n * @param array $credentials\n * @return bool\n * @static\n */\n public static function validate($credentials = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->validate($credentials);\n }\n\n /**\n * Attempt to authenticate using HTTP Basic Auth.\n *\n * @param string $field\n * @param array $extraConditions\n * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException\n * @static\n */\n public static function basic($field = 'email', $extraConditions = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->basic($field, $extraConditions);\n }\n\n /**\n * Perform a stateless HTTP Basic login attempt.\n *\n * @param string $field\n * @param array $extraConditions\n * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException\n * @static\n */\n public static function onceBasic($field = 'email', $extraConditions = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->onceBasic($field, $extraConditions);\n }\n\n /**\n * Attempt to authenticate a user using the given credentials.\n *\n * @param array $credentials\n * @param bool $remember\n * @return bool\n * @static\n */\n public static function attempt($credentials = [], $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->attempt($credentials, $remember);\n }\n\n /**\n * Attempt to authenticate a user with credentials and additional callbacks.\n *\n * @param array $credentials\n * @param array|callable|null $callbacks\n * @param bool $remember\n * @return bool\n * @static\n */\n public static function attemptWhen($credentials = [], $callbacks = null, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->attemptWhen($credentials, $callbacks, $remember);\n }\n\n /**\n * Log the given user ID into the application.\n *\n * @param mixed $id\n * @param bool $remember\n * @return \\Jiminny\\Models\\User|false\n * @static\n */\n public static function loginUsingId($id, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->loginUsingId($id, $remember);\n }\n\n /**\n * Log a user into the application.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable $user\n * @param bool $remember\n * @return void\n * @static\n */\n public static function login($user, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->login($user, $remember);\n }\n\n /**\n * Log the user out of the application.\n *\n * @return void\n * @static\n */\n public static function logout()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->logout();\n }\n\n /**\n * Log the user out of the application on their current device only.\n * \n * This method does not cycle the \"remember\" token.\n *\n * @return void\n * @static\n */\n public static function logoutCurrentDevice()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->logoutCurrentDevice();\n }\n\n /**\n * Invalidate other sessions for the current user.\n * \n * The application must be using the AuthenticateSession middleware.\n *\n * @param string $password\n * @return \\Jiminny\\Models\\User|null\n * @throws \\Illuminate\\Auth\\AuthenticationException\n * @static\n */\n public static function logoutOtherDevices($password)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->logoutOtherDevices($password);\n }\n\n /**\n * Register an authentication attempt event listener.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function attempting($callback)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->attempting($callback);\n }\n\n /**\n * Get the last user we attempted to authenticate.\n *\n * @return \\Jiminny\\Models\\User\n * @static\n */\n public static function getLastAttempted()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getLastAttempted();\n }\n\n /**\n * Get a unique identifier for the auth session value.\n *\n * @return string\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getName();\n }\n\n /**\n * Get the name of the cookie used to store the \"recaller\".\n *\n * @return string\n * @static\n */\n public static function getRecallerName()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getRecallerName();\n }\n\n /**\n * Determine if the user was authenticated via \"remember me\" cookie.\n *\n * @return bool\n * @static\n */\n public static function viaRemember()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->viaRemember();\n }\n\n /**\n * Set the number of minutes the remember me cookie should be valid for.\n *\n * @param int $minutes\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setRememberDuration($minutes)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setRememberDuration($minutes);\n }\n\n /**\n * Get the cookie creator instance used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Cookie\\QueueingFactory\n * @throws \\RuntimeException\n * @static\n */\n public static function getCookieJar()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getCookieJar();\n }\n\n /**\n * Set the cookie creator instance used by the guard.\n *\n * @param \\Illuminate\\Contracts\\Cookie\\QueueingFactory $cookie\n * @return void\n * @static\n */\n public static function setCookieJar($cookie)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setCookieJar($cookie);\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setDispatcher($events)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setDispatcher($events);\n }\n\n /**\n * Get the session store used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Session\\Session\n * @static\n */\n public static function getSession()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getSession();\n }\n\n /**\n * Return the currently cached user.\n *\n * @return \\Jiminny\\Models\\User|null\n * @static\n */\n public static function getUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getUser();\n }\n\n /**\n * Set the current user.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable $user\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setUser($user)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setUser($user);\n }\n\n /**\n * Get the current request instance.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Request\n * @static\n */\n public static function getRequest()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getRequest();\n }\n\n /**\n * Set the current request instance.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setRequest($request)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setRequest($request);\n }\n\n /**\n * Get the timebox instance used by the guard.\n *\n * @return \\Illuminate\\Support\\Timebox\n * @static\n */\n public static function getTimebox()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getTimebox();\n }\n\n /**\n * Determine if the current user is authenticated. If not, throw an exception.\n *\n * @return \\Jiminny\\Models\\User\n * @throws \\Illuminate\\Auth\\AuthenticationException\n * @static\n */\n public static function authenticate()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->authenticate();\n }\n\n /**\n * Determine if the guard has a user instance.\n *\n * @return bool\n * @static\n */\n public static function hasUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->hasUser();\n }\n\n /**\n * Determine if the current user is authenticated.\n *\n * @return bool\n * @static\n */\n public static function check()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->check();\n }\n\n /**\n * Determine if the current user is a guest.\n *\n * @return bool\n * @static\n */\n public static function guest()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->guest();\n }\n\n /**\n * Forget the current user.\n *\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function forgetUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->forgetUser();\n }\n\n /**\n * Get the user provider used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Auth\\UserProvider\n * @static\n */\n public static function getProvider()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getProvider();\n }\n\n /**\n * Set the user provider used by the guard.\n *\n * @param \\Illuminate\\Contracts\\Auth\\UserProvider $provider\n * @return void\n * @static\n */\n public static function setProvider($provider)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setProvider($provider);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Auth\\SessionGuard::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Auth\\SessionGuard::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Auth\\SessionGuard::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Auth\\SessionGuard::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\View\\Compilers\\BladeCompiler\n */\n class Blade {\n /**\n * Compile the view at the given path.\n *\n * @param string|null $path\n * @return void\n * @static\n */\n public static function compile($path = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->compile($path);\n }\n\n /**\n * Get the path currently being compiled.\n *\n * @return string\n * @static\n */\n public static function getPath()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getPath();\n }\n\n /**\n * Set the path currently being compiled.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function setPath($path)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->setPath($path);\n }\n\n /**\n * Compile the given Blade template contents.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function compileString($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileString($value);\n }\n\n /**\n * Evaluate and render a Blade string to HTML.\n *\n * @param string $string\n * @param array $data\n * @param bool $deleteCachedView\n * @return string\n * @static\n */\n public static function render($string, $data = [], $deleteCachedView = false)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::render($string, $data, $deleteCachedView);\n }\n\n /**\n * Render a component instance to HTML.\n *\n * @param \\Illuminate\\View\\Component $component\n * @return string\n * @static\n */\n public static function renderComponent($component)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::renderComponent($component);\n }\n\n /**\n * Strip the parentheses from the given expression.\n *\n * @param string $expression\n * @return string\n * @static\n */\n public static function stripParentheses($expression)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->stripParentheses($expression);\n }\n\n /**\n * Register a custom Blade compiler.\n *\n * @param callable $compiler\n * @return void\n * @static\n */\n public static function extend($compiler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->extend($compiler);\n }\n\n /**\n * Get the extensions used by the compiler.\n *\n * @return array\n * @static\n */\n public static function getExtensions()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getExtensions();\n }\n\n /**\n * Register an \"if\" statement directive.\n *\n * @param string $name\n * @param callable $callback\n * @return void\n * @static\n */\n public static function if($name, $callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->if($name, $callback);\n }\n\n /**\n * Check the result of a condition.\n *\n * @param string $name\n * @param mixed $parameters\n * @return bool\n * @static\n */\n public static function check($name, ...$parameters)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->check($name, ...$parameters);\n }\n\n /**\n * Register a class-based component alias directive.\n *\n * @param string $class\n * @param string|null $alias\n * @param string $prefix\n * @return void\n * @static\n */\n public static function component($class, $alias = null, $prefix = '')\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->component($class, $alias, $prefix);\n }\n\n /**\n * Register an array of class-based components.\n *\n * @param array $components\n * @param string $prefix\n * @return void\n * @static\n */\n public static function components($components, $prefix = '')\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->components($components, $prefix);\n }\n\n /**\n * Get the registered class component aliases.\n *\n * @return array\n * @static\n */\n public static function getClassComponentAliases()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getClassComponentAliases();\n }\n\n /**\n * Register a new anonymous component path.\n *\n * @param string $path\n * @param string|null $prefix\n * @return void\n * @static\n */\n public static function anonymousComponentPath($path, $prefix = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->anonymousComponentPath($path, $prefix);\n }\n\n /**\n * Register an anonymous component namespace.\n *\n * @param string $directory\n * @param string|null $prefix\n * @return void\n * @static\n */\n public static function anonymousComponentNamespace($directory, $prefix = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->anonymousComponentNamespace($directory, $prefix);\n }\n\n /**\n * Register a class-based component namespace.\n *\n * @param string $namespace\n * @param string $prefix\n * @return void\n * @static\n */\n public static function componentNamespace($namespace, $prefix)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->componentNamespace($namespace, $prefix);\n }\n\n /**\n * Get the registered anonymous component paths.\n *\n * @return array\n * @static\n */\n public static function getAnonymousComponentPaths()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getAnonymousComponentPaths();\n }\n\n /**\n * Get the registered anonymous component namespaces.\n *\n * @return array\n * @static\n */\n public static function getAnonymousComponentNamespaces()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getAnonymousComponentNamespaces();\n }\n\n /**\n * Get the registered class component namespaces.\n *\n * @return array\n * @static\n */\n public static function getClassComponentNamespaces()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getClassComponentNamespaces();\n }\n\n /**\n * Register a component alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function aliasComponent($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->aliasComponent($path, $alias);\n }\n\n /**\n * Register an include alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function include($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->include($path, $alias);\n }\n\n /**\n * Register an include alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function aliasInclude($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->aliasInclude($path, $alias);\n }\n\n /**\n * Register a handler for custom directives, binding the handler to the compiler.\n *\n * @param string $name\n * @param callable $handler\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function bindDirective($name, $handler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->bindDirective($name, $handler);\n }\n\n /**\n * Register a handler for custom directives.\n *\n * @param string $name\n * @param callable $handler\n * @param bool $bind\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function directive($name, $handler, $bind = false)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->directive($name, $handler, $bind);\n }\n\n /**\n * Get the list of custom directives.\n *\n * @return array\n * @static\n */\n public static function getCustomDirectives()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getCustomDirectives();\n }\n\n /**\n * Indicate that the following callable should be used to prepare strings for compilation.\n *\n * @param callable $callback\n * @return \\Illuminate\\View\\Compilers\\BladeCompiler\n * @static\n */\n public static function prepareStringsForCompilationUsing($callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->prepareStringsForCompilationUsing($callback);\n }\n\n /**\n * Register a new precompiler.\n *\n * @param callable $precompiler\n * @return void\n * @static\n */\n public static function precompiler($precompiler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->precompiler($precompiler);\n }\n\n /**\n * Execute the given callback using a custom echo format.\n *\n * @param string $format\n * @param callable $callback\n * @return string\n * @static\n */\n public static function usingEchoFormat($format, $callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->usingEchoFormat($format, $callback);\n }\n\n /**\n * Set the echo format to be used by the compiler.\n *\n * @param string $format\n * @return void\n * @static\n */\n public static function setEchoFormat($format)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->setEchoFormat($format);\n }\n\n /**\n * Set the \"echo\" format to double encode entities.\n *\n * @return void\n * @static\n */\n public static function withDoubleEncoding()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withDoubleEncoding();\n }\n\n /**\n * Set the \"echo\" format to not double encode entities.\n *\n * @return void\n * @static\n */\n public static function withoutDoubleEncoding()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withoutDoubleEncoding();\n }\n\n /**\n * Indicate that component tags should not be compiled.\n *\n * @return void\n * @static\n */\n public static function withoutComponentTags()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withoutComponentTags();\n }\n\n /**\n * Get the path to the compiled version of a view.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function getCompiledPath($path)\n {\n //Method inherited from \\Illuminate\\View\\Compilers\\Compiler \n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getCompiledPath($path);\n }\n\n /**\n * Determine if the view at the given path is expired.\n *\n * @param string $path\n * @return bool\n * @throws \\ErrorException\n * @static\n */\n public static function isExpired($path)\n {\n //Method inherited from \\Illuminate\\View\\Compilers\\Compiler \n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->isExpired($path);\n }\n\n /**\n * Get a new component hash for a component name.\n *\n * @param string $component\n * @return string\n * @static\n */\n public static function newComponentHash($component)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::newComponentHash($component);\n }\n\n /**\n * Compile a class component opening.\n *\n * @param string $component\n * @param string $alias\n * @param string $data\n * @param string $hash\n * @return string\n * @static\n */\n public static function compileClassComponentOpening($component, $alias, $data, $hash)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::compileClassComponentOpening($component, $alias, $data, $hash);\n }\n\n /**\n * Compile the end-component statements into valid PHP.\n *\n * @return string\n * @static\n */\n public static function compileEndComponentClass()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEndComponentClass();\n }\n\n /**\n * Sanitize the given component attribute value.\n *\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function sanitizeComponentAttribute($value)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::sanitizeComponentAttribute($value);\n }\n\n /**\n * Compile an end-once block into valid PHP.\n *\n * @return string\n * @static\n */\n public static function compileEndOnce()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEndOnce();\n }\n\n /**\n * Add a handler to be executed before echoing a given class.\n *\n * @param string|callable $class\n * @param callable|null $handler\n * @return void\n * @static\n */\n public static function stringable($class, $handler = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->stringable($class, $handler);\n }\n\n /**\n * Compile Blade echos into valid PHP.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function compileEchos($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEchos($value);\n }\n\n /**\n * Apply the echo handler for the value if it exists.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function applyEchoHandler($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->applyEchoHandler($value);\n }\n\n }\n /**\n * @method static mixed auth(\\Illuminate\\Http\\Request $request)\n * @method static mixed validAuthenticationResponse(\\Illuminate\\Http\\Request $request, mixed $result)\n * @method static void broadcast(array $channels, string $event, array $payload = [])\n * @method static array|null resolveAuthenticatedUser(\\Illuminate\\Http\\Request $request)\n * @method static void resolveAuthenticatedUserUsing(\\Closure $callback)\n * @method static \\Illuminate\\Broadcasting\\Broadcasters\\Broadcaster channel(\\Illuminate\\Contracts\\Broadcasting\\HasBroadcastChannel|string $channel, callable|string $callback, array $options = [])\n * @method static \\Illuminate\\Support\\Collection getChannels()\n * @see \\Illuminate\\Broadcasting\\BroadcastManager\n * @see \\Illuminate\\Broadcasting\\Broadcasters\\Broadcaster\n */\n class Broadcast {\n /**\n * Register the routes for handling broadcast channel authentication and sockets.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function routes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->routes($attributes);\n }\n\n /**\n * Register the routes for handling broadcast user authentication.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function userRoutes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->userRoutes($attributes);\n }\n\n /**\n * Register the routes for handling broadcast authentication and sockets.\n * \n * Alias of \"routes\" method.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function channelRoutes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->channelRoutes($attributes);\n }\n\n /**\n * Get the socket ID for the given request.\n *\n * @param \\Illuminate\\Http\\Request|null $request\n * @return string|null\n * @static\n */\n public static function socket($request = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->socket($request);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given channels.\n *\n * @static\n */\n public static function on($channels)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->on($channels);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given private channels.\n *\n * @static\n */\n public static function private($channel)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->private($channel);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given presence channels.\n *\n * @static\n */\n public static function presence($channel)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->presence($channel);\n }\n\n /**\n * Begin broadcasting an event.\n *\n * @param mixed $event\n * @return \\Illuminate\\Broadcasting\\PendingBroadcast\n * @static\n */\n public static function event($event = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->event($event);\n }\n\n /**\n * Queue the given event for broadcast.\n *\n * @param mixed $event\n * @return void\n * @static\n */\n public static function queue($event)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->queue($event);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @static\n */\n public static function connection($driver = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->connection($driver);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function driver($name = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->driver($name);\n }\n\n /**\n * Get a Pusher instance for the given configuration.\n *\n * @param array $config\n * @return \\Pusher\\Pusher\n * @static\n */\n public static function pusher($config)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->pusher($config);\n }\n\n /**\n * Get an Ably instance for the given configuration.\n *\n * @param array $config\n * @return \\Ably\\AblyRest\n * @static\n */\n public static function ably($config)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->ably($config);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Disconnect the given disk and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function forgetDrivers()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->forgetDrivers();\n }\n\n }\n /**\n * @see \\Illuminate\\Bus\\Dispatcher\n * @see \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n */\n class Bus {\n /**\n * Dispatch a command to its appropriate handler.\n *\n * @param mixed $command\n * @return mixed\n * @static\n */\n public static function dispatch($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatch($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler in the current process.\n * \n * Queueable jobs will be dispatched to the \"sync\" queue.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return mixed\n * @static\n */\n public static function dispatchSync($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchSync($command, $handler);\n }\n\n /**\n * Dispatch a command to its appropriate handler in the current process without using the synchronous queue.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return mixed\n * @static\n */\n public static function dispatchNow($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchNow($command, $handler);\n }\n\n /**\n * Attempt to find the batch with the given ID.\n *\n * @param string $batchId\n * @return \\Illuminate\\Bus\\Batch|null\n * @static\n */\n public static function findBatch($batchId)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->findBatch($batchId);\n }\n\n /**\n * Create a new batch of queueable jobs.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $jobs\n * @return \\Illuminate\\Bus\\PendingBatch\n * @static\n */\n public static function batch($jobs)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->batch($jobs);\n }\n\n /**\n * Create a new chain of queueable jobs.\n *\n * @param \\Illuminate\\Support\\Collection|array|null $jobs\n * @return \\Illuminate\\Foundation\\Bus\\PendingChain\n * @static\n */\n public static function chain($jobs = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->chain($jobs);\n }\n\n /**\n * Determine if the given command has a handler.\n *\n * @param mixed $command\n * @return bool\n * @static\n */\n public static function hasCommandHandler($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->hasCommandHandler($command);\n }\n\n /**\n * Retrieve the handler for a command.\n *\n * @param mixed $command\n * @return mixed\n * @static\n */\n public static function getCommandHandler($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->getCommandHandler($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler behind a queue.\n *\n * @param mixed $command\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function dispatchToQueue($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchToQueue($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler after the current process.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return void\n * @static\n */\n public static function dispatchAfterResponse($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n $instance->dispatchAfterResponse($command, $handler);\n }\n\n /**\n * Set the pipes through which commands should be piped before dispatching.\n *\n * @param array $pipes\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function pipeThrough($pipes)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->pipeThrough($pipes);\n }\n\n /**\n * Map a command to a handler.\n *\n * @param array $map\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function map($map)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->map($map);\n }\n\n /**\n * Allow dispatching after responses.\n *\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function withDispatchingAfterResponses()\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->withDispatchingAfterResponses();\n }\n\n /**\n * Disable dispatching after responses.\n *\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function withoutDispatchingAfterResponses()\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->withoutDispatchingAfterResponses();\n }\n\n /**\n * Specify the jobs that should be dispatched instead of faked.\n *\n * @param array|string $jobsToDispatch\n * @return \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n * @static\n */\n public static function except($jobsToDispatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->except($jobsToDispatch);\n }\n\n /**\n * Assert if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatched($command, $callback);\n }\n\n /**\n * Assert if a job was pushed exactly once.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedOnce($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedOnce($command);\n }\n\n /**\n * Assert if a job was pushed a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatched($command, $callback);\n }\n\n /**\n * Assert that no jobs were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingDispatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingDispatched();\n }\n\n /**\n * Assert if a job was explicitly dispatched synchronously based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedSync($command, $callback);\n }\n\n /**\n * Assert if a job was pushed synchronously a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedSyncTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedSyncTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatchedSync($command, $callback);\n }\n\n /**\n * Assert if a job was dispatched after the response was sent based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Assert if a job was pushed after the response was sent a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedAfterResponseTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedAfterResponseTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Assert if a chain of jobs was dispatched.\n *\n * @param array $expectedChain\n * @return void\n * @static\n */\n public static function assertChained($expectedChain)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertChained($expectedChain);\n }\n\n /**\n * Assert no chained jobs was dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingChained()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingChained();\n }\n\n /**\n * Assert if a job was dispatched with an empty chain based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedWithoutChain($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedWithoutChain($command, $callback);\n }\n\n /**\n * Create a new assertion about a chained batch.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Support\\Testing\\Fakes\\ChainedBatchTruthTest\n * @static\n */\n public static function chainedBatch($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->chainedBatch($callback);\n }\n\n /**\n * Assert if a batch was dispatched based on a truth-test callback.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function assertBatched($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertBatched($callback);\n }\n\n /**\n * Assert the number of batches that have been dispatched.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertBatchCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertBatchCount($count);\n }\n\n /**\n * Assert that no batched jobs were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingBatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingBatched();\n }\n\n /**\n * Assert that no jobs were dispatched, chained, or batched.\n *\n * @return void\n * @static\n */\n public static function assertNothingPlaced()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingPlaced();\n }\n\n /**\n * Get all of the jobs matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatched($command, $callback);\n }\n\n /**\n * Get all of the jobs dispatched synchronously matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedSync($command, $callback);\n }\n\n /**\n * Get all of the jobs dispatched after the response was sent matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Get all of the pending batches matching a truth-test callback.\n *\n * @param callable $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function batched($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->batched($callback);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatched($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatched($command);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatchedSync($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatchedSync($command);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatchedAfterResponse($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatchedAfterResponse($command);\n }\n\n /**\n * Dispatch an empty job batch for testing.\n *\n * @param string $name\n * @return \\Illuminate\\Bus\\Batch\n * @static\n */\n public static function dispatchFakeBatch($name = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchFakeBatch($name);\n }\n\n /**\n * Record the fake pending batch dispatch.\n *\n * @param \\Illuminate\\Bus\\PendingBatch $pendingBatch\n * @return \\Illuminate\\Bus\\Batch\n * @static\n */\n public static function recordPendingBatch($pendingBatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->recordPendingBatch($pendingBatch);\n }\n\n /**\n * Specify if commands should be serialized and restored when being batched.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the batches that have been dispatched.\n *\n * @return array\n * @static\n */\n public static function dispatchedBatches()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedBatches();\n }\n\n }\n /**\n * @see \\Illuminate\\Cache\\CacheManager\n * @see \\Illuminate\\Cache\\Repository\n */\n class Cache {\n /**\n * Get a cache store instance by name, wrapped in a repository.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function store($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->store($name);\n }\n\n /**\n * Get a cache driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Get a memoized cache driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function memo($driver = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->memo($driver);\n }\n\n /**\n * Resolve the given store.\n *\n * @param string $name\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function resolve($name)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->resolve($name);\n }\n\n /**\n * Build a cache repository with the given configuration.\n *\n * @param array $config\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new cache repository with the given implementation.\n *\n * @param \\Illuminate\\Contracts\\Cache\\Store $store\n * @param array $config\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function repository($store, $config = [])\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->repository($store, $config);\n }\n\n /**\n * Re-set the event dispatcher on all resolved cache repositories.\n *\n * @return void\n * @static\n */\n public static function refreshEventDispatcher()\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->refreshEventDispatcher();\n }\n\n /**\n * Get the default cache driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default cache driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Unset the given driver instances.\n *\n * @param array|string|null $name\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function forgetDriver($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->forgetDriver($name);\n }\n\n /**\n * Disconnect the given driver and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Determine if an item exists in the cache.\n *\n * @param array|string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if an item doesn't exist in the cache.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->missing($key);\n }\n\n /**\n * Retrieve an item from the cache by key.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Retrieve multiple items from the cache by key.\n * \n * Items not found in the cache will have a null value.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function many($keys)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->many($keys);\n }\n\n /**\n * Obtains multiple cache items by their unique keys.\n *\n * @return iterable\n * @param iterable<string> $keys A list of keys that can be obtained in a single operation.\n * @param mixed $default Default value to return for keys that do not exist.\n * @return iterable<string, mixed> A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $keys is neither an array nor a Traversable,\n * or if any of the $keys are not a legal value.\n * @static\n */\n public static function getMultiple($keys, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getMultiple($keys, $default);\n }\n\n /**\n * Retrieve an item from the cache and delete it.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Store an item in the cache.\n *\n * @param array|string $key\n * @param mixed $value\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function put($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->put($key, $value, $ttl);\n }\n\n /**\n * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.\n *\n * @return bool\n * @param string $key The key of the item to store.\n * @param mixed $value The value of the item to store, must be serializable.\n * @param null|int|\\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and\n * the driver supports TTL then the library may set a default value\n * for it or let the driver take care of that.\n * @return bool True on success and false on failure.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if the $key string is not a legal value.\n * @static\n */\n public static function set($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->set($key, $value, $ttl);\n }\n\n /**\n * Store multiple items in the cache for a given number of seconds.\n *\n * @param array $values\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function putMany($values, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->putMany($values, $ttl);\n }\n\n /**\n * Persists a set of key => value pairs in the cache, with an optional TTL.\n *\n * @return bool\n * @param iterable $values A list of key => value pairs for a multiple-set operation.\n * @param null|int|\\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and\n * the driver supports TTL then the library may set a default value\n * for it or let the driver take care of that.\n * @return bool True on success and false on failure.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $values is neither an array nor a Traversable,\n * or if any of the $values are not a legal value.\n * @static\n */\n public static function setMultiple($values, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setMultiple($values, $ttl);\n }\n\n /**\n * Store an item in the cache if the key does not exist.\n *\n * @param string $key\n * @param mixed $value\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function add($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->add($key, $value, $ttl);\n }\n\n /**\n * Increment the value of an item in the cache.\n *\n * @param string $key\n * @param mixed $value\n * @return int|bool\n * @static\n */\n public static function increment($key, $value = 1)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->increment($key, $value);\n }\n\n /**\n * Decrement the value of an item in the cache.\n *\n * @param string $key\n * @param mixed $value\n * @return int|bool\n * @static\n */\n public static function decrement($key, $value = 1)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->decrement($key, $value);\n }\n\n /**\n * Store an item in the cache indefinitely.\n *\n * @param string $key\n * @param mixed $value\n * @return bool\n * @static\n */\n public static function forever($key, $value)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->forever($key, $value);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure|\\DateTimeInterface|\\DateInterval|int|null $ttl\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function remember($key, $ttl, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->remember($key, $ttl, $callback);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result forever.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function sear($key, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->sear($key, $callback);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result forever.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function rememberForever($key, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->rememberForever($key, $callback);\n }\n\n /**\n * Retrieve an item from the cache by key, refreshing it in the background if it is stale.\n *\n * @template TCacheValue\n * @param string $key\n * @param array{ 0: \\DateTimeInterface|\\DateInterval|int, 1: \\DateTimeInterface|\\DateInterval|int } $ttl\n * @param (callable(): TCacheValue) $callback\n * @param array{ seconds?: int, owner?: string }|null $lock\n * @param bool $alwaysDefer\n * @return TCacheValue\n * @static\n */\n public static function flexible($key, $ttl, $callback, $lock = null, $alwaysDefer = false)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->flexible($key, $ttl, $callback, $lock, $alwaysDefer);\n }\n\n /**\n * Remove an item from the cache.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function forget($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->forget($key);\n }\n\n /**\n * Delete an item from the cache by its unique key.\n *\n * @return bool\n * @param string $key The unique cache key of the item to delete.\n * @return bool True if the item was successfully removed. False if there was an error.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if the $key string is not a legal value.\n * @static\n */\n public static function delete($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->delete($key);\n }\n\n /**\n * Deletes multiple cache items in a single operation.\n *\n * @return bool\n * @param iterable<string> $keys A list of string-based keys to be deleted.\n * @return bool True if the items were successfully removed. False if there was an error.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $keys is neither an array nor a Traversable,\n * or if any of the $keys are not a legal value.\n * @static\n */\n public static function deleteMultiple($keys)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->deleteMultiple($keys);\n }\n\n /**\n * Wipes clean the entire cache's keys.\n *\n * @return bool\n * @return bool True on success and false on failure.\n * @static\n */\n public static function clear()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->clear();\n }\n\n /**\n * Begin executing a new tags operation if the store supports it.\n *\n * @param mixed $names\n * @return \\Illuminate\\Cache\\TaggedCache\n * @throws \\BadMethodCallException\n * @static\n */\n public static function tags($names)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->tags($names);\n }\n\n /**\n * Get the name of the cache store.\n *\n * @return string|null\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getName();\n }\n\n /**\n * Determine if the current store supports tags.\n *\n * @return bool\n * @static\n */\n public static function supportsTags()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->supportsTags();\n }\n\n /**\n * Get the default cache time.\n *\n * @return int|null\n * @static\n */\n public static function getDefaultCacheTime()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getDefaultCacheTime();\n }\n\n /**\n * Set the default cache time in seconds.\n *\n * @param int|null $seconds\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function setDefaultCacheTime($seconds)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setDefaultCacheTime($seconds);\n }\n\n /**\n * Get the cache store implementation.\n *\n * @return \\Illuminate\\Contracts\\Cache\\Store\n * @static\n */\n public static function getStore()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getStore();\n }\n\n /**\n * Set the cache store implementation.\n *\n * @param \\Illuminate\\Contracts\\Cache\\Store $store\n * @return static\n * @static\n */\n public static function setStore($store)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setStore($store);\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher|null\n * @static\n */\n public static function getEventDispatcher()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getEventDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setEventDispatcher($events)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->setEventDispatcher($events);\n }\n\n /**\n * Determine if a cached value exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Retrieve an item from the cache by key.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Store an item in the cache for the default time.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Remove an item from the cache.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Cache\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Cache\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Cache\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Cache\\Repository::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Get a lock instance.\n *\n * @param string $name\n * @param int $seconds\n * @param string|null $owner\n * @return \\Illuminate\\Contracts\\Cache\\Lock\n * @static\n */\n public static function lock($name, $seconds = 0, $owner = null)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->lock($name, $seconds, $owner);\n }\n\n /**\n * Restore a lock instance using the owner identifier.\n *\n * @param string $name\n * @param string $owner\n * @return \\Illuminate\\Contracts\\Cache\\Lock\n * @static\n */\n public static function restoreLock($name, $owner)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->restoreLock($name, $owner);\n }\n\n /**\n * Remove all items from the cache.\n *\n * @return bool\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->flush();\n }\n\n /**\n * Remove all expired tag set entries.\n *\n * @return void\n * @static\n */\n public static function flushStaleTags()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->flushStaleTags();\n }\n\n /**\n * Get the Redis connection instance.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function connection()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->connection();\n }\n\n /**\n * Get the Redis connection instance that should be used to manage locks.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function lockConnection()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->lockConnection();\n }\n\n /**\n * Specify the name of the connection that should be used to store data.\n *\n * @param string $connection\n * @return void\n * @static\n */\n public static function setConnection($connection)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->setConnection($connection);\n }\n\n /**\n * Specify the name of the connection that should be used to manage locks.\n *\n * @param string $connection\n * @return \\Illuminate\\Cache\\RedisStore\n * @static\n */\n public static function setLockConnection($connection)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->setLockConnection($connection);\n }\n\n /**\n * Get the Redis database instance.\n *\n * @return \\Illuminate\\Contracts\\Redis\\Factory\n * @static\n */\n public static function getRedis()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->getRedis();\n }\n\n /**\n * Get the cache key prefix.\n *\n * @return string\n * @static\n */\n public static function getPrefix()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->getPrefix();\n }\n\n /**\n * Set the cache key prefix.\n *\n * @param string $prefix\n * @return void\n * @static\n */\n public static function setPrefix($prefix)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->setPrefix($prefix);\n }\n\n }\n /**\n * @method static array run(\\Closure|array $tasks)\n * @method static \\Illuminate\\Support\\Defer\\DeferredCallback defer(\\Closure|array $tasks)\n * @see \\Illuminate\\Concurrency\\ConcurrencyManager\n */\n class Concurrency {\n /**\n * Get a driver instance by name.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function driver($name = null)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->driver($name);\n }\n\n /**\n * Create an instance of the process concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\ProcessDriver\n * @static\n */\n public static function createProcessDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createProcessDriver($config);\n }\n\n /**\n * Create an instance of the fork concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\ForkDriver\n * @throws \\RuntimeException\n * @static\n */\n public static function createForkDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createForkDriver($config);\n }\n\n /**\n * Create an instance of the sync concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\SyncDriver\n * @static\n */\n public static function createSyncDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createSyncDriver($config);\n }\n\n /**\n * Get the default instance name.\n *\n * @return string\n * @static\n */\n public static function getDefaultInstance()\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->getDefaultInstance();\n }\n\n /**\n * Set the default instance name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultInstance($name)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n $instance->setDefaultInstance($name);\n }\n\n /**\n * Get the instance specific configuration.\n *\n * @param string $name\n * @return array\n * @static\n */\n public static function getInstanceConfig($name)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->getInstanceConfig($name);\n }\n\n /**\n * Get an instance by name.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function instance($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->instance($name);\n }\n\n /**\n * Unset the given instances.\n *\n * @param array|string|null $name\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function forgetInstance($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->forgetInstance($name);\n }\n\n /**\n * Disconnect the given instance and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom instance creator Closure.\n *\n * @param string $name\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function extend($name, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->extend($name, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function setApplication($app)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->setApplication($app);\n }\n\n }\n /**\n * @see \\Illuminate\\Config\\Repository\n */\n class Config {\n /**\n * Determine if the given configuration value exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Get the specified configuration value.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get many configuration values.\n *\n * @param array<string|int,mixed> $keys\n * @return array<string,mixed>\n * @static\n */\n public static function getMany($keys)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->getMany($keys);\n }\n\n /**\n * Get the specified string configuration value.\n *\n * @param string $key\n * @param (\\Closure():(string|null))|string|null $default\n * @return string\n * @static\n */\n public static function string($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->string($key, $default);\n }\n\n /**\n * Get the specified integer configuration value.\n *\n * @param string $key\n * @param (\\Closure():(int|null))|int|null $default\n * @return int\n * @static\n */\n public static function integer($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->integer($key, $default);\n }\n\n /**\n * Get the specified float configuration value.\n *\n * @param string $key\n * @param (\\Closure():(float|null))|float|null $default\n * @return float\n * @static\n */\n public static function float($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->float($key, $default);\n }\n\n /**\n * Get the specified boolean configuration value.\n *\n * @param string $key\n * @param (\\Closure():(bool|null))|bool|null $default\n * @return bool\n * @static\n */\n public static function boolean($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->boolean($key, $default);\n }\n\n /**\n * Get the specified array configuration value.\n *\n * @param string $key\n * @param (\\Closure():(array<array-key, mixed>|null))|array<array-key, mixed>|null $default\n * @return array<array-key, mixed>\n * @static\n */\n public static function array($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->array($key, $default);\n }\n\n /**\n * Get the specified array configuration value as a collection.\n *\n * @param string $key\n * @param (\\Closure():(array<array-key, mixed>|null))|array<array-key, mixed>|null $default\n * @return Collection<array-key, mixed>\n * @static\n */\n public static function collection($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->collection($key, $default);\n }\n\n /**\n * Set a given configuration value.\n *\n * @param array|string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function set($key, $value = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->set($key, $value);\n }\n\n /**\n * Prepend a value onto an array configuration value.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function prepend($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->prepend($key, $value);\n }\n\n /**\n * Push a value onto an array configuration value.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function push($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->push($key, $value);\n }\n\n /**\n * Get all of the configuration items for the application.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->all();\n }\n\n /**\n * Determine if the given configuration option exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Get a configuration option.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Set a configuration option.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Unset a configuration option.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Config\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Config\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Config\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Config\\Repository::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Log\\Context\\Repository\n */\n class Context {\n /**\n * Determine if the given key exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if the given key is missing.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->missing($key);\n }\n\n /**\n * Determine if the given key exists within the hidden context data.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hasHidden($key);\n }\n\n /**\n * Determine if the given key is missing within the hidden context data.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missingHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->missingHidden($key);\n }\n\n /**\n * Retrieve all the context data.\n *\n * @return array<string, mixed>\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->all();\n }\n\n /**\n * Retrieve all the hidden context data.\n *\n * @return array<string, mixed>\n * @static\n */\n public static function allHidden()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->allHidden();\n }\n\n /**\n * Retrieve the given key's value.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Retrieve the given key's hidden value.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getHidden($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->getHidden($key, $default);\n }\n\n /**\n * Retrieve the given key's value and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Retrieve the given key's hidden value and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pullHidden($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pullHidden($key, $default);\n }\n\n /**\n * Retrieve only the values of the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->only($keys);\n }\n\n /**\n * Retrieve only the hidden values of the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function onlyHidden($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->onlyHidden($keys);\n }\n\n /**\n * Retrieve all values except those with the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->except($keys);\n }\n\n /**\n * Retrieve all hidden values except those with the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function exceptHidden($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->exceptHidden($keys);\n }\n\n /**\n * Add a context value.\n *\n * @param string|array<string, mixed> $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function add($key, $value = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->add($key, $value);\n }\n\n /**\n * Add a hidden context value.\n *\n * @param string|array<string, mixed> $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addHidden($key, $value = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addHidden($key, $value);\n }\n\n /**\n * Add a context value if it does not exist yet, and return the value.\n *\n * @param string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function remember($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->remember($key, $value);\n }\n\n /**\n * Add a hidden context value if it does not exist yet, and return the value.\n *\n * @param string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function rememberHidden($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->rememberHidden($key, $value);\n }\n\n /**\n * Forget the given context key.\n *\n * @param string|array<int, string> $key\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function forget($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->forget($key);\n }\n\n /**\n * Forget the given hidden context key.\n *\n * @param string|array<int, string> $key\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function forgetHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->forgetHidden($key);\n }\n\n /**\n * Add a context value if it does not exist yet.\n *\n * @param string $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addIf($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addIf($key, $value);\n }\n\n /**\n * Add a hidden context value if it does not exist yet.\n *\n * @param string $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addHiddenIf($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addHiddenIf($key, $value);\n }\n\n /**\n * Push the given values onto the key's stack.\n *\n * @param string $key\n * @param mixed $values\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function push($key, ...$values)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->push($key, ...$values);\n }\n\n /**\n * Pop the latest value from the key's stack.\n *\n * @param string $key\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function pop($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pop($key);\n }\n\n /**\n * Push the given hidden values onto the key's stack.\n *\n * @param string $key\n * @param mixed $values\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function pushHidden($key, ...$values)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pushHidden($key, ...$values);\n }\n\n /**\n * Pop the latest hidden value from the key's stack.\n *\n * @param string $key\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function popHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->popHidden($key);\n }\n\n /**\n * Increment a context counter.\n *\n * @param string $key\n * @param int $amount\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function increment($key, $amount = 1)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->increment($key, $amount);\n }\n\n /**\n * Decrement a context counter.\n *\n * @param string $key\n * @param int $amount\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function decrement($key, $amount = 1)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->decrement($key, $amount);\n }\n\n /**\n * Determine if the given value is in the given stack.\n *\n * @param string $key\n * @param mixed $value\n * @param bool $strict\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function stackContains($key, $value, $strict = false)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->stackContains($key, $value, $strict);\n }\n\n /**\n * Determine if the given value is in the given hidden stack.\n *\n * @param string $key\n * @param mixed $value\n * @param bool $strict\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function hiddenStackContains($key, $value, $strict = false)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hiddenStackContains($key, $value, $strict);\n }\n\n /**\n * Run the callback function with the given context values and restore the original context state when complete.\n *\n * @param callable $callback\n * @param array<string, mixed> $data\n * @param array<string, mixed> $hidden\n * @return mixed\n * @throws \\Throwable\n * @static\n */\n public static function scope($callback, $data = [], $hidden = [])\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->scope($callback, $data, $hidden);\n }\n\n /**\n * Determine if the repository is empty.\n *\n * @return bool\n * @static\n */\n public static function isEmpty()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->isEmpty();\n }\n\n /**\n * Execute the given callback when context is about to be dehydrated.\n *\n * @param callable $callback\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function dehydrating($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->dehydrating($callback);\n }\n\n /**\n * Execute the given callback when context has been hydrated.\n *\n * @param callable $callback\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function hydrated($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hydrated($callback);\n }\n\n /**\n * Handle unserialize exceptions using the given callback.\n *\n * @param callable|null $callback\n * @return static\n * @static\n */\n public static function handleUnserializeExceptionsUsing($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->handleUnserializeExceptionsUsing($callback);\n }\n\n /**\n * Flush all context data.\n *\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->flush();\n }\n\n /**\n * Dehydrate the context data.\n *\n * @internal\n * @return \\Illuminate\\Log\\Context\\?array\n * @static\n */\n public static function dehydrate()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->dehydrate();\n }\n\n /**\n * Hydrate the context instance.\n *\n * @internal\n * @param \\Illuminate\\Log\\Context\\?array $context\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function hydrate($context)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hydrate($context);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Log\\Context\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Log\\Context\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Log\\Context\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Log\\Context\\Repository::flushMacros();\n }\n\n /**\n * Restore the model from the model identifier instance.\n *\n * @param \\Illuminate\\Contracts\\Database\\ModelIdentifier $value\n * @return \\Illuminate\\Database\\Eloquent\\Model\n * @static\n */\n public static function restoreModel($value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->restoreModel($value);\n }\n\n }\n /**\n * @see \\Illuminate\\Cookie\\CookieJar\n */\n class Cookie {\n /**\n * Create a new cookie instance.\n *\n * @param string $name\n * @param string $value\n * @param int $minutes\n * @param string|null $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param bool $httpOnly\n * @param bool $raw\n * @param string|null $sameSite\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->make($name, $value, $minutes, $path, $domain, $secure, $httpOnly, $raw, $sameSite);\n }\n\n /**\n * Create a cookie that lasts \"forever\" (400 days).\n *\n * @param string $name\n * @param string $value\n * @param string|null $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param bool $httpOnly\n * @param bool $raw\n * @param string|null $sameSite\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function forever($name, $value, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->forever($name, $value, $path, $domain, $secure, $httpOnly, $raw, $sameSite);\n }\n\n /**\n * Expire the given cookie.\n *\n * @param string $name\n * @param string|null $path\n * @param string|null $domain\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function forget($name, $path = null, $domain = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->forget($name, $path, $domain);\n }\n\n /**\n * Determine if a cookie has been queued.\n *\n * @param string $key\n * @param string|null $path\n * @return bool\n * @static\n */\n public static function hasQueued($key, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->hasQueued($key, $path);\n }\n\n /**\n * Get a queued cookie instance.\n *\n * @param string $key\n * @param mixed $default\n * @param string|null $path\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie|null\n * @static\n */\n public static function queued($key, $default = null, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->queued($key, $default, $path);\n }\n\n /**\n * Queue a cookie to send with the next response.\n *\n * @param mixed $parameters\n * @return void\n * @static\n */\n public static function queue(...$parameters)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->queue(...$parameters);\n }\n\n /**\n * Queue a cookie to expire with the next response.\n *\n * @param string $name\n * @param string|null $path\n * @param string|null $domain\n * @return void\n * @static\n */\n public static function expire($name, $path = null, $domain = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->expire($name, $path, $domain);\n }\n\n /**\n * Remove a cookie from the queue.\n *\n * @param string $name\n * @param string|null $path\n * @return void\n * @static\n */\n public static function unqueue($name, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->unqueue($name, $path);\n }\n\n /**\n * Set the default path and domain for the jar.\n *\n * @param string $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param string|null $sameSite\n * @return \\Illuminate\\Cookie\\CookieJar\n * @static\n */\n public static function setDefaultPathAndDomain($path, $domain, $secure = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->setDefaultPathAndDomain($path, $domain, $secure, $sameSite);\n }\n\n /**\n * Get the cookies which have been queued for the next request.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie[]\n * @static\n */\n public static function getQueuedCookies()\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->getQueuedCookies();\n }\n\n /**\n * Flush the cookies which have been queued for the next request.\n *\n * @return \\Illuminate\\Cookie\\CookieJar\n * @static\n */\n public static function flushQueuedCookies()\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->flushQueuedCookies();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Cookie\\CookieJar::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Cookie\\CookieJar::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Cookie\\CookieJar::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Cookie\\CookieJar::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Encryption\\Encrypter\n */\n class Crypt {\n /**\n * Determine if the given key and cipher combination is valid.\n *\n * @param string $key\n * @param string $cipher\n * @return bool\n * @static\n */\n public static function supported($key, $cipher)\n {\n return \\Illuminate\\Encryption\\Encrypter::supported($key, $cipher);\n }\n\n /**\n * Create a new encryption key for the given cipher.\n *\n * @param string $cipher\n * @return string\n * @static\n */\n public static function generateKey($cipher)\n {\n return \\Illuminate\\Encryption\\Encrypter::generateKey($cipher);\n }\n\n /**\n * Encrypt the given value.\n *\n * @param mixed $value\n * @param bool $serialize\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n * @static\n */\n public static function encrypt($value, $serialize = true)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->encrypt($value, $serialize);\n }\n\n /**\n * Encrypt a string without serialization.\n *\n * @param string $value\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n * @static\n */\n public static function encryptString($value)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->encryptString($value);\n }\n\n /**\n * Decrypt the given value.\n *\n * @param string $payload\n * @param bool $unserialize\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n * @static\n */\n public static function decrypt($payload, $unserialize = true)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->decrypt($payload, $unserialize);\n }\n\n /**\n * Decrypt the given string without unserialization.\n *\n * @param string $payload\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n * @static\n */\n public static function decryptString($payload)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->decryptString($payload);\n }\n\n /**\n * Get the encryption key that the encrypter is currently using.\n *\n * @return string\n * @static\n */\n public static function getKey()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getKey();\n }\n\n /**\n * Get the current encryption key and all previous encryption keys.\n *\n * @return array\n * @static\n */\n public static function getAllKeys()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getAllKeys();\n }\n\n /**\n * Get the previous encryption keys.\n *\n * @return array\n * @static\n */\n public static function getPreviousKeys()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getPreviousKeys();\n }\n\n /**\n * Set the previous / legacy encryption keys that should be utilized if decryption fails.\n *\n * @param array $keys\n * @return \\Illuminate\\Encryption\\Encrypter\n * @static\n */\n public static function previousKeys($keys)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->previousKeys($keys);\n }\n\n }\n /**\n * @see \\Illuminate\\Database\\DatabaseManager\n */\n class DB {\n /**\n * Get a database connection instance.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Build a database connection instance from the given configuration.\n *\n * @param array $config\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Calculate the dynamic connection name for an on-demand connection based on its configuration.\n *\n * @param array $config\n * @return string\n * @static\n */\n public static function calculateDynamicConnectionName($config)\n {\n return \\Illuminate\\Database\\DatabaseManager::calculateDynamicConnectionName($config);\n }\n\n /**\n * Get a database connection instance from the given configuration.\n *\n * @param \\UnitEnum|string $name\n * @param array $config\n * @param bool $force\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function connectUsing($name, $config, $force = false)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->connectUsing($name, $config, $force);\n }\n\n /**\n * Disconnect from the given database and remove from local cache.\n *\n * @param \\UnitEnum|string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Disconnect from the given database.\n *\n * @param \\UnitEnum|string|null $name\n * @return void\n * @static\n */\n public static function disconnect($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->disconnect($name);\n }\n\n /**\n * Reconnect to the given database.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function reconnect($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->reconnect($name);\n }\n\n /**\n * Set the default database connection for the callback execution.\n *\n * @param \\UnitEnum|string $name\n * @param callable $callback\n * @return mixed\n * @static\n */\n public static function usingConnection($name, $callback)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->usingConnection($name, $callback);\n }\n\n /**\n * Get the default connection name.\n *\n * @return string\n * @static\n */\n public static function getDefaultConnection()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->getDefaultConnection();\n }\n\n /**\n * Set the default connection name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultConnection($name)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->setDefaultConnection($name);\n }\n\n /**\n * Get all of the supported drivers.\n *\n * @return string[]\n * @static\n */\n public static function supportedDrivers()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->supportedDrivers();\n }\n\n /**\n * Get all of the drivers that are actually available.\n *\n * @return string[]\n * @static\n */\n public static function availableDrivers()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->availableDrivers();\n }\n\n /**\n * Register an extension connection resolver.\n *\n * @param string $name\n * @param callable $resolver\n * @return void\n * @static\n */\n public static function extend($name, $resolver)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->extend($name, $resolver);\n }\n\n /**\n * Remove an extension connection resolver.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function forgetExtension($name)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->forgetExtension($name);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array<string, \\Illuminate\\Database\\Connection>\n * @static\n */\n public static function getConnections()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->getConnections();\n }\n\n /**\n * Set the database reconnector callback.\n *\n * @param callable $reconnector\n * @return void\n * @static\n */\n public static function setReconnector($reconnector)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->setReconnector($reconnector);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Database\\DatabaseManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Database\\DatabaseManager::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Database\\DatabaseManager::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Database\\DatabaseManager::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Database\\DatabaseManager::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Get a human-readable name for the given connection driver.\n *\n * @return string\n * @static\n */\n public static function getDriverTitle()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDriverTitle();\n }\n\n /**\n * Determine if the connected database is a MariaDB database.\n *\n * @return bool\n * @static\n */\n public static function isMaria()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->isMaria();\n }\n\n /**\n * Get the server version for the connection.\n *\n * @return string\n * @static\n */\n public static function getServerVersion()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getServerVersion();\n }\n\n /**\n * Get a schema builder instance for the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\MariaDbBuilder\n * @static\n */\n public static function getSchemaBuilder()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaBuilder();\n }\n\n /**\n * Get the schema state for the connection.\n *\n * @param \\Illuminate\\Filesystem\\Filesystem|null $files\n * @param callable|null $processFactory\n * @return \\Illuminate\\Database\\Schema\\MariaDbSchemaState\n * @static\n */\n public static function getSchemaState($files = null, $processFactory = null)\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaState($files, $processFactory);\n }\n\n /**\n * Run an insert statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @param string|null $sequence\n * @return bool\n * @static\n */\n public static function insert($query, $bindings = [], $sequence = null)\n {\n //Method inherited from \\Illuminate\\Database\\MySqlConnection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->insert($query, $bindings, $sequence);\n }\n\n /**\n * Get the connection's last insert ID.\n *\n * @return string|int|null\n * @static\n */\n public static function getLastInsertId()\n {\n //Method inherited from \\Illuminate\\Database\\MySqlConnection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getLastInsertId();\n }\n\n /**\n * Set the query grammar to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultQueryGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultQueryGrammar();\n }\n\n /**\n * Set the schema grammar to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultSchemaGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultSchemaGrammar();\n }\n\n /**\n * Set the query post processor to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultPostProcessor()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultPostProcessor();\n }\n\n /**\n * Begin a fluent query against a database table.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|\\UnitEnum|string $table\n * @param string|null $as\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function table($table, $as = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->table($table, $as);\n }\n\n /**\n * Get a new query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function query()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->query();\n }\n\n /**\n * Run a select statement and return a single result.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return mixed\n * @static\n */\n public static function selectOne($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectOne($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement and return the first column of the first row.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return mixed\n * @throws \\Illuminate\\Database\\MultipleColumnsSelectedException\n * @static\n */\n public static function scalar($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->scalar($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return array\n * @static\n */\n public static function selectFromWriteConnection($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectFromWriteConnection($query, $bindings);\n }\n\n /**\n * Run a select statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return array\n * @static\n */\n public static function select($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->select($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database and returns all of the result sets.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return array\n * @static\n */\n public static function selectResultSets($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectResultSets($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database and returns a generator.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return \\Generator<int, \\stdClass>\n * @static\n */\n public static function cursor($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->cursor($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run an update statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function update($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->update($query, $bindings);\n }\n\n /**\n * Run a delete statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function delete($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->delete($query, $bindings);\n }\n\n /**\n * Execute an SQL statement and return the boolean result.\n *\n * @param string $query\n * @param array $bindings\n * @return bool\n * @static\n */\n public static function statement($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->statement($query, $bindings);\n }\n\n /**\n * Run an SQL statement and get the number of rows affected.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function affectingStatement($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->affectingStatement($query, $bindings);\n }\n\n /**\n * Run a raw, unprepared query against the PDO connection.\n *\n * @param string $query\n * @return bool\n * @static\n */\n public static function unprepared($query)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->unprepared($query);\n }\n\n /**\n * Get the number of open connections for the database.\n *\n * @return int|null\n * @static\n */\n public static function threadCount()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->threadCount();\n }\n\n /**\n * Execute the given callback in \"dry run\" mode.\n *\n * @param (\\Closure(\\Illuminate\\Database\\Connection): mixed) $callback\n * @return \\Illuminate\\Database\\array{query: string, bindings: array, time: float|null}[]\n * @static\n */\n public static function pretend($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->pretend($callback);\n }\n\n /**\n * Execute the given callback without \"pretending\".\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutPretending($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->withoutPretending($callback);\n }\n\n /**\n * Bind values to their parameters in the given statement.\n *\n * @param \\PDOStatement $statement\n * @param array $bindings\n * @return void\n * @static\n */\n public static function bindValues($statement, $bindings)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->bindValues($statement, $bindings);\n }\n\n /**\n * Prepare the query bindings for execution.\n *\n * @param array $bindings\n * @return array\n * @static\n */\n public static function prepareBindings($bindings)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->prepareBindings($bindings);\n }\n\n /**\n * Log a query in the connection's query log.\n *\n * @param string $query\n * @param array $bindings\n * @param float|null $time\n * @return void\n * @static\n */\n public static function logQuery($query, $bindings, $time = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->logQuery($query, $bindings, $time);\n }\n\n /**\n * Register a callback to be invoked when the connection queries for longer than a given amount of time.\n *\n * @param \\DateTimeInterface|\\Carbon\\CarbonInterval|float|int $threshold\n * @param (callable(\\Illuminate\\Database\\Connection, \\Illuminate\\Database\\Events\\QueryExecuted): mixed) $handler\n * @return void\n * @static\n */\n public static function whenQueryingForLongerThan($threshold, $handler)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->whenQueryingForLongerThan($threshold, $handler);\n }\n\n /**\n * Allow all the query duration handlers to run again, even if they have already run.\n *\n * @return void\n * @static\n */\n public static function allowQueryDurationHandlersToRunAgain()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->allowQueryDurationHandlersToRunAgain();\n }\n\n /**\n * Get the duration of all run queries in milliseconds.\n *\n * @return float\n * @static\n */\n public static function totalQueryDuration()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->totalQueryDuration();\n }\n\n /**\n * Reset the duration of all run queries.\n *\n * @return void\n * @static\n */\n public static function resetTotalQueryDuration()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->resetTotalQueryDuration();\n }\n\n /**\n * Reconnect to the database if a PDO connection is missing.\n *\n * @return void\n * @static\n */\n public static function reconnectIfMissingConnection()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->reconnectIfMissingConnection();\n }\n\n /**\n * Register a hook to be run just before a database transaction is started.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function beforeStartingTransaction($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->beforeStartingTransaction($callback);\n }\n\n /**\n * Register a hook to be run just before a database query is executed.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function beforeExecuting($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->beforeExecuting($callback);\n }\n\n /**\n * Register a database query listener with the connection.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function listen($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->listen($callback);\n }\n\n /**\n * Get a new raw query expression.\n *\n * @param mixed $value\n * @return \\Illuminate\\Contracts\\Database\\Query\\Expression\n * @static\n */\n public static function raw($value)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->raw($value);\n }\n\n /**\n * Escape a value for safe SQL embedding.\n *\n * @param string|float|int|bool|null $value\n * @param bool $binary\n * @return string\n * @static\n */\n public static function escape($value, $binary = false)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->escape($value, $binary);\n }\n\n /**\n * Determine if the database connection has modified any database records.\n *\n * @return bool\n * @static\n */\n public static function hasModifiedRecords()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->hasModifiedRecords();\n }\n\n /**\n * Indicate if any records have been modified.\n *\n * @param bool $value\n * @return void\n * @static\n */\n public static function recordsHaveBeenModified($value = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->recordsHaveBeenModified($value);\n }\n\n /**\n * Set the record modification state.\n *\n * @param bool $value\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setRecordModificationState($value)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setRecordModificationState($value);\n }\n\n /**\n * Reset the record modification state.\n *\n * @return void\n * @static\n */\n public static function forgetRecordModificationState()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->forgetRecordModificationState();\n }\n\n /**\n * Indicate that the connection should use the write PDO connection for reads.\n *\n * @param bool $value\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function useWriteConnectionWhenReading($value = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->useWriteConnectionWhenReading($value);\n }\n\n /**\n * Get the current PDO connection.\n *\n * @return \\PDO\n * @static\n */\n public static function getPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getPdo();\n }\n\n /**\n * Get the current PDO connection parameter without executing any reconnect logic.\n *\n * @return \\PDO|\\Closure|null\n * @static\n */\n public static function getRawPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawPdo();\n }\n\n /**\n * Get the current PDO connection used for reading.\n *\n * @return \\PDO\n * @static\n */\n public static function getReadPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getReadPdo();\n }\n\n /**\n * Get the current read PDO connection parameter without executing any reconnect logic.\n *\n * @return \\PDO|\\Closure|null\n * @static\n */\n public static function getRawReadPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawReadPdo();\n }\n\n /**\n * Set the PDO connection.\n *\n * @param \\PDO|\\Closure|null $pdo\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setPdo($pdo)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setPdo($pdo);\n }\n\n /**\n * Set the PDO connection used for reading.\n *\n * @param \\PDO|\\Closure|null $pdo\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setReadPdo($pdo)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setReadPdo($pdo);\n }\n\n /**\n * Get the database connection name.\n *\n * @return string|null\n * @static\n */\n public static function getName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getName();\n }\n\n /**\n * Get the database connection full name.\n *\n * @return string|null\n * @static\n */\n public static function getNameWithReadWriteType()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getNameWithReadWriteType();\n }\n\n /**\n * Get an option from the configuration options.\n *\n * @param string|null $option\n * @return mixed\n * @static\n */\n public static function getConfig($option = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getConfig($option);\n }\n\n /**\n * Get the PDO driver name.\n *\n * @return string\n * @static\n */\n public static function getDriverName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDriverName();\n }\n\n /**\n * Get the query grammar used by the connection.\n *\n * @return \\Illuminate\\Database\\Query\\Grammars\\Grammar\n * @static\n */\n public static function getQueryGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getQueryGrammar();\n }\n\n /**\n * Set the query grammar used by the connection.\n *\n * @param \\Illuminate\\Database\\Query\\Grammars\\Grammar $grammar\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setQueryGrammar($grammar)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setQueryGrammar($grammar);\n }\n\n /**\n * Get the schema grammar used by the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\Grammars\\Grammar\n * @static\n */\n public static function getSchemaGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaGrammar();\n }\n\n /**\n * Set the schema grammar used by the connection.\n *\n * @param \\Illuminate\\Database\\Schema\\Grammars\\Grammar $grammar\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setSchemaGrammar($grammar)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setSchemaGrammar($grammar);\n }\n\n /**\n * Get the query post processor used by the connection.\n *\n * @return \\Illuminate\\Database\\Query\\Processors\\Processor\n * @static\n */\n public static function getPostProcessor()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getPostProcessor();\n }\n\n /**\n * Set the query post processor used by the connection.\n *\n * @param \\Illuminate\\Database\\Query\\Processors\\Processor $processor\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setPostProcessor($processor)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setPostProcessor($processor);\n }\n\n /**\n * Get the event dispatcher used by the connection.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getEventDispatcher()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getEventDispatcher();\n }\n\n /**\n * Set the event dispatcher instance on the connection.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setEventDispatcher($events)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setEventDispatcher($events);\n }\n\n /**\n * Unset the event dispatcher for this connection.\n *\n * @return void\n * @static\n */\n public static function unsetEventDispatcher()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->unsetEventDispatcher();\n }\n\n /**\n * Set the transaction manager instance on the connection.\n *\n * @param \\Illuminate\\Database\\DatabaseTransactionsManager $manager\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setTransactionManager($manager)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setTransactionManager($manager);\n }\n\n /**\n * Unset the transaction manager for this connection.\n *\n * @return void\n * @static\n */\n public static function unsetTransactionManager()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->unsetTransactionManager();\n }\n\n /**\n * Determine if the connection is in a \"dry run\".\n *\n * @return bool\n * @static\n */\n public static function pretending()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->pretending();\n }\n\n /**\n * Get the connection query log.\n *\n * @return \\Illuminate\\Database\\array{query: string, bindings: array, time: float|null}[]\n * @static\n */\n public static function getQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getQueryLog();\n }\n\n /**\n * Get the connection query log with embedded bindings.\n *\n * @return array\n * @static\n */\n public static function getRawQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawQueryLog();\n }\n\n /**\n * Clear the query log.\n *\n * @return void\n * @static\n */\n public static function flushQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->flushQueryLog();\n }\n\n /**\n * Enable the query log on the connection.\n *\n * @return void\n * @static\n */\n public static function enableQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->enableQueryLog();\n }\n\n /**\n * Disable the query log on the connection.\n *\n * @return void\n * @static\n */\n public static function disableQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->disableQueryLog();\n }\n\n /**\n * Determine whether we're logging queries.\n *\n * @return bool\n * @static\n */\n public static function logging()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->logging();\n }\n\n /**\n * Get the name of the connected database.\n *\n * @return string\n * @static\n */\n public static function getDatabaseName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDatabaseName();\n }\n\n /**\n * Set the name of the connected database.\n *\n * @param string $database\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setDatabaseName($database)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setDatabaseName($database);\n }\n\n /**\n * Set the read / write type of the connection.\n *\n * @param string|null $readWriteType\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setReadWriteType($readWriteType)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setReadWriteType($readWriteType);\n }\n\n /**\n * Get the table prefix for the connection.\n *\n * @return string\n * @static\n */\n public static function getTablePrefix()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getTablePrefix();\n }\n\n /**\n * Set the table prefix in use by the connection.\n *\n * @param string $prefix\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setTablePrefix($prefix)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setTablePrefix($prefix);\n }\n\n /**\n * Execute the given callback without table prefix.\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutTablePrefix($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->withoutTablePrefix($callback);\n }\n\n /**\n * Register a connection resolver.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function resolverFor($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n \\Illuminate\\Database\\MariaDbConnection::resolverFor($driver, $callback);\n }\n\n /**\n * Get the connection resolver for the given driver.\n *\n * @param string $driver\n * @return \\Closure|null\n * @static\n */\n public static function getResolver($driver)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n return \\Illuminate\\Database\\MariaDbConnection::getResolver($driver);\n }\n\n /**\n * @template TReturn of mixed\n * \n * Execute a Closure within a transaction.\n * @param (\\Closure(static): TReturn) $callback\n * @param int $attempts\n * @return TReturn\n * @throws \\Throwable\n * @static\n */\n public static function transaction($callback, $attempts = 1)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->transaction($callback, $attempts);\n }\n\n /**\n * Start a new database transaction.\n *\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function beginTransaction()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->beginTransaction();\n }\n\n /**\n * Commit the active database transaction.\n *\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function commit()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->commit();\n }\n\n /**\n * Rollback the active database transaction.\n *\n * @param int|null $toLevel\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function rollBack($toLevel = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->rollBack($toLevel);\n }\n\n /**\n * Get the number of active transactions.\n *\n * @return int\n * @static\n */\n public static function transactionLevel()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->transactionLevel();\n }\n\n /**\n * Execute the callback after a transaction commits.\n *\n * @param callable $callback\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function afterCommit($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->afterCommit($callback);\n }\n\n /**\n * Execute the callback after a transaction rolls back.\n *\n * @param callable $callback\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function afterRollBack($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->afterRollBack($callback);\n }\n\n }\n /**\n * @see \\Illuminate\\Events\\Dispatcher\n * @see \\Illuminate\\Support\\Testing\\Fakes\\EventFake\n */\n class Event {\n /**\n * Register an event listener with the dispatcher.\n *\n * @param \\Illuminate\\Events\\Queued\\Closure|callable|array|class-string|string $events\n * @param \\Illuminate\\Events\\Queued\\Closure|callable|array|class-string|null $listener\n * @return void\n * @static\n */\n public static function listen($events, $listener = null)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->listen($events, $listener);\n }\n\n /**\n * Determine if a given event has listeners.\n *\n * @param string $eventName\n * @return bool\n * @static\n */\n public static function hasListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->hasListeners($eventName);\n }\n\n /**\n * Determine if the given event has any wildcard listeners.\n *\n * @param string $eventName\n * @return bool\n * @static\n */\n public static function hasWildcardListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->hasWildcardListeners($eventName);\n }\n\n /**\n * Register an event and payload to be fired later.\n *\n * @param string $event\n * @param object|array $payload\n * @return void\n * @static\n */\n public static function push($event, $payload = [])\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->push($event, $payload);\n }\n\n /**\n * Flush a set of pushed events.\n *\n * @param string $event\n * @return void\n * @static\n */\n public static function flush($event)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->flush($event);\n }\n\n /**\n * Register an event subscriber with the dispatcher.\n *\n * @param object|string $subscriber\n * @return void\n * @static\n */\n public static function subscribe($subscriber)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->subscribe($subscriber);\n }\n\n /**\n * Fire an event until the first non-null response is returned.\n *\n * @param string|object $event\n * @param mixed $payload\n * @return mixed\n * @static\n */\n public static function until($event, $payload = [])\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->until($event, $payload);\n }\n\n /**\n * Fire an event and call the listeners.\n *\n * @param string|object $event\n * @param mixed $payload\n * @param bool $halt\n * @return array|null\n * @static\n */\n public static function dispatch($event, $payload = [], $halt = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->dispatch($event, $payload, $halt);\n }\n\n /**\n * Get all of the listeners for a given event name.\n *\n * @param string $eventName\n * @return array\n * @static\n */\n public static function getListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->getListeners($eventName);\n }\n\n /**\n * Register an event listener with the dispatcher.\n *\n * @param \\Closure|string|array $listener\n * @param bool $wildcard\n * @return \\Closure\n * @static\n */\n public static function makeListener($listener, $wildcard = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->makeListener($listener, $wildcard);\n }\n\n /**\n * Create a class based listener using the IoC container.\n *\n * @param string $listener\n * @param bool $wildcard\n * @return \\Closure\n * @static\n */\n public static function createClassListener($listener, $wildcard = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->createClassListener($listener, $wildcard);\n }\n\n /**\n * Remove a set of listeners from the dispatcher.\n *\n * @param string $event\n * @return void\n * @static\n */\n public static function forget($event)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->forget($event);\n }\n\n /**\n * Forget all of the pushed listeners.\n *\n * @return void\n * @static\n */\n public static function forgetPushed()\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->forgetPushed();\n }\n\n /**\n * Set the queue resolver implementation.\n *\n * @param callable $resolver\n * @return \\Illuminate\\Events\\Dispatcher\n * @static\n */\n public static function setQueueResolver($resolver)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->setQueueResolver($resolver);\n }\n\n /**\n * Set the database transaction manager resolver implementation.\n *\n * @param callable $resolver\n * @return \\Illuminate\\Events\\Dispatcher\n * @static\n */\n public static function setTransactionManagerResolver($resolver)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->setTransactionManagerResolver($resolver);\n }\n\n /**\n * Execute the given callback while deferring events, then dispatch all deferred events.\n *\n * @param callable $callback\n * @param array|null $events\n * @return mixed\n * @static\n */\n public static function defer($callback, $events = null)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->defer($callback, $events);\n }\n\n /**\n * Gets the raw, unprepared listeners.\n *\n * @return array\n * @static\n */\n public static function getRawListeners()\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->getRawListeners();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Events\\Dispatcher::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Events\\Dispatcher::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Events\\Dispatcher::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Events\\Dispatcher::flushMacros();\n }\n\n /**\n * Specify the events that should be dispatched instead of faked.\n *\n * @param array|string $eventsToDispatch\n * @return \\Illuminate\\Support\\Testing\\Fakes\\EventFake\n * @static\n */\n public static function except($eventsToDispatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->except($eventsToDispatch);\n }\n\n /**\n * Assert if an event has a listener attached to it.\n *\n * @param string $expectedEvent\n * @param string|array $expectedListener\n * @return void\n * @static\n */\n public static function assertListening($expectedEvent, $expectedListener)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertListening($expectedEvent, $expectedListener);\n }\n\n /**\n * Assert if an event was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $event\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatched($event, $callback);\n }\n\n /**\n * Assert if an event was dispatched exactly once.\n *\n * @param string $event\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedOnce($event)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatchedOnce($event);\n }\n\n /**\n * Assert if an event was dispatched a number of times.\n *\n * @param string $event\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedTimes($event, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatchedTimes($event, $times);\n }\n\n /**\n * Determine if an event was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $event\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertNotDispatched($event, $callback);\n }\n\n /**\n * Assert that no events were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingDispatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertNothingDispatched();\n }\n\n /**\n * Get all of the events matching a truth-test callback.\n *\n * @param string $event\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->dispatched($event, $callback);\n }\n\n /**\n * Determine if the given event has been dispatched.\n *\n * @param string $event\n * @return bool\n * @static\n */\n public static function hasDispatched($event)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->hasDispatched($event);\n }\n\n /**\n * Get the events that have been dispatched.\n *\n * @return array\n * @static\n */\n public static function dispatchedEvents()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->dispatchedEvents();\n }\n\n }\n /**\n * @see \\Illuminate\\Filesystem\\Filesystem\n */\n class File {\n /**\n * Determine if a file or directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function exists($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->exists($path);\n }\n\n /**\n * Determine if a file or directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function missing($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->missing($path);\n }\n\n /**\n * Get the contents of a file.\n *\n * @param string $path\n * @param bool $lock\n * @return string\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function get($path, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->get($path, $lock);\n }\n\n /**\n * Get the contents of a file as decoded JSON.\n *\n * @param string $path\n * @param int $flags\n * @param bool $lock\n * @return array\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function json($path, $flags = 0, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->json($path, $flags, $lock);\n }\n\n /**\n * Get contents of a file with shared access.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function sharedGet($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->sharedGet($path);\n }\n\n /**\n * Get the returned value of a file.\n *\n * @param string $path\n * @param array $data\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function getRequire($path, $data = [])\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->getRequire($path, $data);\n }\n\n /**\n * Require the given file once.\n *\n * @param string $path\n * @param array $data\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function requireOnce($path, $data = [])\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->requireOnce($path, $data);\n }\n\n /**\n * Get the contents of a file one line at a time.\n *\n * @param string $path\n * @return \\Illuminate\\Support\\LazyCollection\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function lines($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->lines($path);\n }\n\n /**\n * Get the hash of the file at the given path.\n *\n * @param string $path\n * @param string $algorithm\n * @return string|false\n * @static\n */\n public static function hash($path, $algorithm = 'md5')\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->hash($path, $algorithm);\n }\n\n /**\n * Write the contents of a file.\n *\n * @param string $path\n * @param string $contents\n * @param bool $lock\n * @return int|bool\n * @static\n */\n public static function put($path, $contents, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->put($path, $contents, $lock);\n }\n\n /**\n * Write the contents of a file, replacing it atomically if it already exists.\n *\n * @param string $path\n * @param string $content\n * @param int|null $mode\n * @return void\n * @static\n */\n public static function replace($path, $content, $mode = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->replace($path, $content, $mode);\n }\n\n /**\n * Replace a given string within a given file.\n *\n * @param array|string $search\n * @param array|string $replace\n * @param string $path\n * @return void\n * @static\n */\n public static function replaceInFile($search, $replace, $path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->replaceInFile($search, $replace, $path);\n }\n\n /**\n * Prepend to a file.\n *\n * @param string $path\n * @param string $data\n * @return int\n * @static\n */\n public static function prepend($path, $data)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->prepend($path, $data);\n }\n\n /**\n * Append to a file.\n *\n * @param string $path\n * @param string $data\n * @param bool $lock\n * @return int\n * @static\n */\n public static function append($path, $data, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->append($path, $data, $lock);\n }\n\n /**\n * Get or set UNIX mode of a file or directory.\n *\n * @param string $path\n * @param int|null $mode\n * @return mixed\n * @static\n */\n public static function chmod($path, $mode = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->chmod($path, $mode);\n }\n\n /**\n * Delete the file at a given path.\n *\n * @param string|array $paths\n * @return bool\n * @static\n */\n public static function delete($paths)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->delete($paths);\n }\n\n /**\n * Move a file to a new location.\n *\n * @param string $path\n * @param string $target\n * @return bool\n * @static\n */\n public static function move($path, $target)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->move($path, $target);\n }\n\n /**\n * Copy a file to a new location.\n *\n * @param string $path\n * @param string $target\n * @return bool\n * @static\n */\n public static function copy($path, $target)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->copy($path, $target);\n }\n\n /**\n * Create a symlink to the target file or directory. On Windows, a hard link is created if the target is a file.\n *\n * @param string $target\n * @param string $link\n * @return bool|null\n * @static\n */\n public static function link($target, $link)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->link($target, $link);\n }\n\n /**\n * Create a relative symlink to the target file or directory.\n *\n * @param string $target\n * @param string $link\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function relativeLink($target, $link)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->relativeLink($target, $link);\n }\n\n /**\n * Extract the file name from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function name($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->name($path);\n }\n\n /**\n * Extract the trailing name component from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function basename($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->basename($path);\n }\n\n /**\n * Extract the parent directory from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function dirname($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->dirname($path);\n }\n\n /**\n * Extract the file extension from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function extension($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->extension($path);\n }\n\n /**\n * Guess the file extension from the mime-type of a given file.\n *\n * @param string $path\n * @return string|null\n * @throws \\RuntimeException\n * @static\n */\n public static function guessExtension($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->guessExtension($path);\n }\n\n /**\n * Get the file type of a given file.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function type($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->type($path);\n }\n\n /**\n * Get the mime-type of a given file.\n *\n * @param string $path\n * @return string|false\n * @static\n */\n public static function mimeType($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->mimeType($path);\n }\n\n /**\n * Get the file size of a given file.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function size($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->size($path);\n }\n\n /**\n * Get the file's last modification time.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function lastModified($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->lastModified($path);\n }\n\n /**\n * Determine if the given path is a directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function isDirectory($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isDirectory($directory);\n }\n\n /**\n * Determine if the given path is a directory that does not contain any other files or directories.\n *\n * @param string $directory\n * @param bool $ignoreDotFiles\n * @return bool\n * @static\n */\n public static function isEmptyDirectory($directory, $ignoreDotFiles = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isEmptyDirectory($directory, $ignoreDotFiles);\n }\n\n /**\n * Determine if the given path is readable.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isReadable($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isReadable($path);\n }\n\n /**\n * Determine if the given path is writable.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isWritable($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isWritable($path);\n }\n\n /**\n * Determine if two files are the same by comparing their hashes.\n *\n * @param string $firstFile\n * @param string $secondFile\n * @return bool\n * @static\n */\n public static function hasSameHash($firstFile, $secondFile)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->hasSameHash($firstFile, $secondFile);\n }\n\n /**\n * Determine if the given path is a file.\n *\n * @param string $file\n * @return bool\n * @static\n */\n public static function isFile($file)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isFile($file);\n }\n\n /**\n * Find path names matching a given pattern.\n *\n * @param string $pattern\n * @param int $flags\n * @return array\n * @static\n */\n public static function glob($pattern, $flags = 0)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->glob($pattern, $flags);\n }\n\n /**\n * Get an array of all files in a directory.\n *\n * @param string $directory\n * @param bool $hidden\n * @return \\Symfony\\Component\\Finder\\SplFileInfo[]\n * @static\n */\n public static function files($directory, $hidden = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->files($directory, $hidden);\n }\n\n /**\n * Get all of the files from the given directory (recursive).\n *\n * @param string $directory\n * @param bool $hidden\n * @return \\Symfony\\Component\\Finder\\SplFileInfo[]\n * @static\n */\n public static function allFiles($directory, $hidden = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->allFiles($directory, $hidden);\n }\n\n /**\n * Get all of the directories within a given directory.\n *\n * @param string $directory\n * @return array\n * @static\n */\n public static function directories($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->directories($directory);\n }\n\n /**\n * Ensure a directory exists.\n *\n * @param string $path\n * @param int $mode\n * @param bool $recursive\n * @return void\n * @static\n */\n public static function ensureDirectoryExists($path, $mode = 493, $recursive = true)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->ensureDirectoryExists($path, $mode, $recursive);\n }\n\n /**\n * Create a directory.\n *\n * @param string $path\n * @param int $mode\n * @param bool $recursive\n * @param bool $force\n * @return bool\n * @static\n */\n public static function makeDirectory($path, $mode = 493, $recursive = false, $force = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->makeDirectory($path, $mode, $recursive, $force);\n }\n\n /**\n * Move a directory.\n *\n * @param string $from\n * @param string $to\n * @param bool $overwrite\n * @return bool\n * @static\n */\n public static function moveDirectory($from, $to, $overwrite = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->moveDirectory($from, $to, $overwrite);\n }\n\n /**\n * Copy a directory from one location to another.\n *\n * @param string $directory\n * @param string $destination\n * @param int|null $options\n * @return bool\n * @static\n */\n public static function copyDirectory($directory, $destination, $options = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->copyDirectory($directory, $destination, $options);\n }\n\n /**\n * Recursively delete a directory.\n * \n * The directory itself may be optionally preserved.\n *\n * @param string $directory\n * @param bool $preserve\n * @return bool\n * @static\n */\n public static function deleteDirectory($directory, $preserve = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->deleteDirectory($directory, $preserve);\n }\n\n /**\n * Remove all of the directories within a given directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function deleteDirectories($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->deleteDirectories($directory);\n }\n\n /**\n * Empty the specified directory of all files and folders.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function cleanDirectory($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->cleanDirectory($directory);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Filesystem\\Filesystem::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Filesystem\\Filesystem::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Filesystem\\Filesystem::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Filesystem\\Filesystem::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Auth\\Access\\Gate\n */\n class Gate {\n /**\n * Determine if a given ability has been defined.\n *\n * @param string|array $ability\n * @return bool\n * @static\n */\n public static function has($ability)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->has($ability);\n }\n\n /**\n * Perform an on-demand authorization check. Throw an authorization exception if the condition or callback is false.\n *\n * @param \\Illuminate\\Auth\\Access\\Response|\\Closure|bool $condition\n * @param string|null $message\n * @param string|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function allowIf($condition, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->allowIf($condition, $message, $code);\n }\n\n /**\n * Perform an on-demand authorization check. Throw an authorization exception if the condition or callback is true.\n *\n * @param \\Illuminate\\Auth\\Access\\Response|\\Closure|bool $condition\n * @param string|null $message\n * @param string|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function denyIf($condition, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyIf($condition, $message, $code);\n }\n\n /**\n * Define a new ability.\n *\n * @param \\UnitEnum|string $ability\n * @param callable|array|string $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function define($ability, $callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->define($ability, $callback);\n }\n\n /**\n * Define abilities for a resource.\n *\n * @param string $name\n * @param string $class\n * @param array|null $abilities\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function resource($name, $class, $abilities = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->resource($name, $class, $abilities);\n }\n\n /**\n * Define a policy class for a given class type.\n *\n * @param string $class\n * @param string $policy\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function policy($class, $policy)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->policy($class, $policy);\n }\n\n /**\n * Register a callback to run before all Gate checks.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function before($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->before($callback);\n }\n\n /**\n * Register a callback to run after all Gate checks.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function after($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->after($callback);\n }\n\n /**\n * Determine if all of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $ability\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function allows($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->allows($ability, $arguments);\n }\n\n /**\n * Determine if any of the given abilities should be denied for the current user.\n *\n * @param iterable|\\UnitEnum|string $ability\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function denies($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denies($ability, $arguments);\n }\n\n /**\n * Determine if all of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function check($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->check($abilities, $arguments);\n }\n\n /**\n * Determine if any one of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function any($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->any($abilities, $arguments);\n }\n\n /**\n * Determine if all of the given abilities should be denied for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function none($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->none($abilities, $arguments);\n }\n\n /**\n * Determine if the given ability should be granted for the current user.\n *\n * @param \\UnitEnum|string $ability\n * @param mixed $arguments\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function authorize($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->authorize($ability, $arguments);\n }\n\n /**\n * Inspect the user for the given ability.\n *\n * @param \\UnitEnum|string $ability\n * @param mixed $arguments\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function inspect($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->inspect($ability, $arguments);\n }\n\n /**\n * Get the raw result from the authorization callback.\n *\n * @param string $ability\n * @param mixed $arguments\n * @return mixed\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function raw($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->raw($ability, $arguments);\n }\n\n /**\n * Get a policy instance for a given class.\n *\n * @param object|string $class\n * @return mixed\n * @static\n */\n public static function getPolicyFor($class)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->getPolicyFor($class);\n }\n\n /**\n * Specify a callback to be used to guess policy names.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function guessPolicyNamesUsing($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->guessPolicyNamesUsing($callback);\n }\n\n /**\n * Build a policy class instance of the given type.\n *\n * @param object|string $class\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function resolvePolicy($class)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->resolvePolicy($class);\n }\n\n /**\n * Get a gate instance for the given user.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable|mixed $user\n * @return static\n * @static\n */\n public static function forUser($user)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->forUser($user);\n }\n\n /**\n * Get all of the defined abilities.\n *\n * @return array\n * @static\n */\n public static function abilities()\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->abilities();\n }\n\n /**\n * Get all of the defined policies.\n *\n * @return array\n * @static\n */\n public static function policies()\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->policies();\n }\n\n /**\n * Set the default denial response for gates and policies.\n *\n * @param \\Illuminate\\Auth\\Access\\Response $response\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function defaultDenialResponse($response)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->defaultDenialResponse($response);\n }\n\n /**\n * Set the container instance used by the gate.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Deny with a HTTP status code.\n *\n * @param int $status\n * @param string|null $message\n * @param int|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function denyWithStatus($status, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyWithStatus($status, $message, $code);\n }\n\n /**\n * Deny with a 404 HTTP status code.\n *\n * @param string|null $message\n * @param int|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function denyAsNotFound($message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyAsNotFound($message, $code);\n }\n\n }\n /**\n * @see \\Illuminate\\Hashing\\HashManager\n * @see \\Illuminate\\Hashing\\AbstractHasher\n */\n class Hash {\n /**\n * Create an instance of the Bcrypt hash Driver.\n *\n * @return \\Illuminate\\Hashing\\BcryptHasher\n * @static\n */\n public static function createBcryptDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createBcryptDriver();\n }\n\n /**\n * Create an instance of the Argon2i hash Driver.\n *\n * @return \\Illuminate\\Hashing\\ArgonHasher\n * @static\n */\n public static function createArgonDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createArgonDriver();\n }\n\n /**\n * Create an instance of the Argon2id hash Driver.\n *\n * @return \\Illuminate\\Hashing\\Argon2IdHasher\n * @static\n */\n public static function createArgon2idDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createArgon2idDriver();\n }\n\n /**\n * Get information about the given hashed value.\n *\n * @param string $hashedValue\n * @return array\n * @static\n */\n public static function info($hashedValue)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->info($hashedValue);\n }\n\n /**\n * Hash the given value.\n *\n * @param string $value\n * @param array $options\n * @return string\n * @static\n */\n public static function make($value, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->make($value, $options);\n }\n\n /**\n * Check the given plain value against a hash.\n *\n * @param string $value\n * @param string $hashedValue\n * @param array $options\n * @return bool\n * @static\n */\n public static function check($value, $hashedValue, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->check($value, $hashedValue, $options);\n }\n\n /**\n * Check if the given hash has been hashed using the given options.\n *\n * @param string $hashedValue\n * @param array $options\n * @return bool\n * @static\n */\n public static function needsRehash($hashedValue, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->needsRehash($hashedValue, $options);\n }\n\n /**\n * Determine if a given string is already hashed.\n *\n * @param string $value\n * @return bool\n * @static\n */\n public static function isHashed($value)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->isHashed($value);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Verifies that the configuration is less than or equal to what is configured.\n *\n * @param array $value\n * @return bool\n * @internal\n * @static\n */\n public static function verifyConfiguration($value)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->verifyConfiguration($value);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->forgetDrivers();\n }\n\n }\n /**\n * @method static \\Illuminate\\Http\\Client\\PendingRequest baseUrl(string $url)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withBody(\\Psr\\Http\\Message\\StreamInterface|string $content, string $contentType = 'application/json')\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asJson()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asForm()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest attach(string|array $name, string|resource $contents = '', string|null $filename = null, array $headers = [])\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asMultipart()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest bodyFormat(string $format)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withQueryParameters(array $parameters)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest contentType(string $contentType)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest acceptJson()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest accept(string $contentType)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withHeaders(array $headers)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withHeader(string $name, mixed $value)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest replaceHeaders(array $headers)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withBasicAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withDigestAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withNtlmAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withToken(string $token, string $type = 'Bearer')\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withUserAgent(string|bool $userAgent)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withUrlParameters(array $parameters = [])\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withCookies(array $cookies, string $domain)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest maxRedirects(int $max)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withoutRedirecting()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withoutVerifying()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest sink(string|resource $to)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest timeout(int|float $seconds)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest connectTimeout(int|float $seconds)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest retry(array|int $times, \\Closure|int $sleepMilliseconds = 0, callable|null $when = null, bool $throw = true)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withOptions(array $options)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withRequestMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withResponseMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest beforeSending(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throw(callable|null $callback = null)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throwIf(callable|bool $condition)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throwUnless(callable|bool $condition)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dump()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dd()\n * @method static \\Illuminate\\Http\\Client\\Response get(string $url, array|string|null $query = null)\n * @method static \\Illuminate\\Http\\Client\\Response head(string $url, array|string|null $query = null)\n * @method static \\Illuminate\\Http\\Client\\Response post(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response patch(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response put(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response delete(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static array pool(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\Batch batch(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\Response send(string $method, string $url, array $options = [])\n * @method static \\GuzzleHttp\\Client buildClient()\n * @method static \\GuzzleHttp\\Client createClient(\\GuzzleHttp\\HandlerStack $handlerStack)\n * @method static \\GuzzleHttp\\HandlerStack buildHandlerStack()\n * @method static \\GuzzleHttp\\HandlerStack pushHandlers(\\GuzzleHttp\\HandlerStack $handlerStack)\n * @method static \\Closure buildBeforeSendingHandler()\n * @method static \\Closure buildRecorderHandler()\n * @method static \\Closure buildStubHandler()\n * @method static \\GuzzleHttp\\Psr7\\RequestInterface runBeforeSendingCallbacks(\\GuzzleHttp\\Psr7\\RequestInterface $request, array $options)\n * @method static array mergeOptions(array ...$options)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest stub(callable $callback)\n * @method static bool isAllowedRequestUrl(string $url)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest async(bool $async = true)\n * @method static \\GuzzleHttp\\Promise\\PromiseInterface|null getPromise()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest truncateExceptionsAt(int $length)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dontTruncateExceptions()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest setClient(\\GuzzleHttp\\Client $client)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest setHandler(callable $handler)\n * @method static array getOptions()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Http\\Client\\Factory\n */\n class Http {\n /**\n * Add middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalMiddleware($middleware);\n }\n\n /**\n * Add request middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalRequestMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalRequestMiddleware($middleware);\n }\n\n /**\n * Add response middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalResponseMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalResponseMiddleware($middleware);\n }\n\n /**\n * Set the options to apply to every request.\n *\n * @param \\Closure|array $options\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalOptions($options)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalOptions($options);\n }\n\n /**\n * Create a new response instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array $headers\n * @return \\GuzzleHttp\\Promise\\PromiseInterface\n * @static\n */\n public static function response($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::response($body, $status, $headers);\n }\n\n /**\n * Create a new PSR-7 response instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array<string, mixed> $headers\n * @return \\GuzzleHttp\\Psr7\\Response\n * @static\n */\n public static function psr7Response($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::psr7Response($body, $status, $headers);\n }\n\n /**\n * Create a new RequestException instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array<string, mixed> $headers\n * @return \\Illuminate\\Http\\Client\\RequestException\n * @static\n */\n public static function failedRequest($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::failedRequest($body, $status, $headers);\n }\n\n /**\n * Create a new connection exception for use during stubbing.\n *\n * @param string|null $message\n * @return \\Closure(\\Illuminate\\Http\\Client\\Request): \\GuzzleHttp\\Promise\\PromiseInterface\n * @static\n */\n public static function failedConnection($message = null)\n {\n return \\Illuminate\\Http\\Client\\Factory::failedConnection($message);\n }\n\n /**\n * Get an invokable object that returns a sequence of responses in order for use during stubbing.\n *\n * @param array $responses\n * @return \\Illuminate\\Http\\Client\\ResponseSequence\n * @static\n */\n public static function sequence($responses = [])\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->sequence($responses);\n }\n\n /**\n * Register a stub callable that will intercept requests and be able to return stub responses.\n *\n * @param callable|array<string, mixed>|null $callback\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function fake($callback = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->fake($callback);\n }\n\n /**\n * Register a response sequence for the given URL pattern.\n *\n * @param string $url\n * @return \\Illuminate\\Http\\Client\\ResponseSequence\n * @static\n */\n public static function fakeSequence($url = '*')\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->fakeSequence($url);\n }\n\n /**\n * Stub the given URL using the given callback.\n *\n * @param string $url\n * @param \\Illuminate\\Http\\Client\\Response|\\GuzzleHttp\\Promise\\PromiseInterface|callable|int|string|array|\\Illuminate\\Http\\Client\\ResponseSequence $callback\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function stubUrl($url, $callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->stubUrl($url, $callback);\n }\n\n /**\n * Indicate that an exception should be thrown if any request is not faked.\n *\n * @param bool $prevent\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function preventStrayRequests($prevent = true)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->preventStrayRequests($prevent);\n }\n\n /**\n * Determine if stray requests are being prevented.\n *\n * @return bool\n * @static\n */\n public static function preventingStrayRequests()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->preventingStrayRequests();\n }\n\n /**\n * Allow stray, unfaked requests entirely, or optionally allow only specific URLs.\n *\n * @param array<int, string>|null $only\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function allowStrayRequests($only = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->allowStrayRequests($only);\n }\n\n /**\n * Begin recording request / response pairs.\n *\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function record()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->record();\n }\n\n /**\n * Record a request response pair.\n *\n * @param \\Illuminate\\Http\\Client\\Request $request\n * @param \\Illuminate\\Http\\Client\\Response|null $response\n * @return void\n * @static\n */\n public static function recordRequestResponsePair($request, $response)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->recordRequestResponsePair($request, $response);\n }\n\n /**\n * Assert that a request / response pair was recorded matching a given truth test.\n *\n * @param callable|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool) $callback\n * @return void\n * @static\n */\n public static function assertSent($callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSent($callback);\n }\n\n /**\n * Assert that the given request was sent in the given order.\n *\n * @param list<string|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool)|callable> $callbacks\n * @return void\n * @static\n */\n public static function assertSentInOrder($callbacks)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSentInOrder($callbacks);\n }\n\n /**\n * Assert that a request / response pair was not recorded matching a given truth test.\n *\n * @param callable|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool) $callback\n * @return void\n * @static\n */\n public static function assertNotSent($callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertNotSent($callback);\n }\n\n /**\n * Assert that no request / response pair was recorded.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert how many requests have been recorded.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertSentCount($count)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSentCount($count);\n }\n\n /**\n * Assert that every created response sequence is empty.\n *\n * @return void\n * @static\n */\n public static function assertSequencesAreEmpty()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSequencesAreEmpty();\n }\n\n /**\n * Get a collection of the request / response pairs matching the given truth test.\n *\n * @param (\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool)|callable $callback\n * @return \\Illuminate\\Support\\Collection<int, array{0: \\Illuminate\\Http\\Client\\Request, 1: \\Illuminate\\Http\\Client\\Response|null}>\n * @static\n */\n public static function recorded($callback = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->recorded($callback);\n }\n\n /**\n * Create a new pending request instance for this factory.\n *\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function createPendingRequest()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->createPendingRequest();\n }\n\n /**\n * Get the current event dispatcher implementation.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher|null\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Get the array of global middleware.\n *\n * @return array\n * @static\n */\n public static function getGlobalMiddleware()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->getGlobalMiddleware();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Http\\Client\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Http\\Client\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Http\\Client\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Http\\Client\\Factory::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatApi();\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatAnalyticsApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatAnalyticsApi();\n }\n\n }\n /**\n * @see \\Illuminate\\Translation\\Translator\n */\n class Lang {\n /**\n * Determine if a translation exists for a given locale.\n *\n * @param string $key\n * @param string|null $locale\n * @return bool\n * @static\n */\n public static function hasForLocale($key, $locale = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->hasForLocale($key, $locale);\n }\n\n /**\n * Determine if a translation exists.\n *\n * @param string $key\n * @param string|null $locale\n * @param bool $fallback\n * @return bool\n * @static\n */\n public static function has($key, $locale = null, $fallback = true)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->has($key, $locale, $fallback);\n }\n\n /**\n * Get the translation for the given key.\n *\n * @param string $key\n * @param array $replace\n * @param string|null $locale\n * @param bool $fallback\n * @return string|array\n * @static\n */\n public static function get($key, $replace = [], $locale = null, $fallback = true)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->get($key, $replace, $locale, $fallback);\n }\n\n /**\n * Get a translation according to an integer value.\n *\n * @param string $key\n * @param \\Countable|int|float|array $number\n * @param array $replace\n * @param string|null $locale\n * @return string\n * @static\n */\n public static function choice($key, $number, $replace = [], $locale = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->choice($key, $number, $replace, $locale);\n }\n\n /**\n * Add translation lines to the given locale.\n *\n * @param array $lines\n * @param string $locale\n * @param string $namespace\n * @return void\n * @static\n */\n public static function addLines($lines, $locale, $namespace = '*')\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addLines($lines, $locale, $namespace);\n }\n\n /**\n * Load the specified language group.\n *\n * @param string $namespace\n * @param string $group\n * @param string $locale\n * @return void\n * @static\n */\n public static function load($namespace, $group, $locale)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->load($namespace, $group, $locale);\n }\n\n /**\n * Register a callback that is responsible for handling missing translation keys.\n *\n * @param callable|null $callback\n * @return static\n * @static\n */\n public static function handleMissingKeysUsing($callback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->handleMissingKeysUsing($callback);\n }\n\n /**\n * Add a new namespace to the loader.\n *\n * @param string $namespace\n * @param string $hint\n * @return void\n * @static\n */\n public static function addNamespace($namespace, $hint)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addNamespace($namespace, $hint);\n }\n\n /**\n * Add a new path to the loader.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function addPath($path)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addPath($path);\n }\n\n /**\n * Add a new JSON path to the loader.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function addJsonPath($path)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addJsonPath($path);\n }\n\n /**\n * Parse a key into namespace, group, and item.\n *\n * @param string $key\n * @return array\n * @static\n */\n public static function parseKey($key)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->parseKey($key);\n }\n\n /**\n * Specify a callback that should be invoked to determined the applicable locale array.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function determineLocalesUsing($callback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->determineLocalesUsing($callback);\n }\n\n /**\n * Get the message selector instance.\n *\n * @return \\Illuminate\\Translation\\MessageSelector\n * @static\n */\n public static function getSelector()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getSelector();\n }\n\n /**\n * Set the message selector instance.\n *\n * @param \\Illuminate\\Translation\\MessageSelector $selector\n * @return void\n * @static\n */\n public static function setSelector($selector)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setSelector($selector);\n }\n\n /**\n * Get the language line loader implementation.\n *\n * @return \\Illuminate\\Contracts\\Translation\\Loader\n * @static\n */\n public static function getLoader()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getLoader();\n }\n\n /**\n * Get the default locale being used.\n *\n * @return string\n * @static\n */\n public static function locale()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->locale();\n }\n\n /**\n * Get the default locale being used.\n *\n * @return string\n * @static\n */\n public static function getLocale()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getLocale();\n }\n\n /**\n * Set the default locale.\n *\n * @param string $locale\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function setLocale($locale)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setLocale($locale);\n }\n\n /**\n * Get the fallback locale being used.\n *\n * @return string\n * @static\n */\n public static function getFallback()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getFallback();\n }\n\n /**\n * Set the fallback locale being used.\n *\n * @param string $fallback\n * @return void\n * @static\n */\n public static function setFallback($fallback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setFallback($fallback);\n }\n\n /**\n * Set the loaded translation groups.\n *\n * @param array $loaded\n * @return void\n * @static\n */\n public static function setLoaded($loaded)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setLoaded($loaded);\n }\n\n /**\n * Add a handler to be executed in order to format a given class to a string during translation replacements.\n *\n * @param callable|string $class\n * @param callable|null $handler\n * @return void\n * @static\n */\n public static function stringable($class, $handler = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->stringable($class, $handler);\n }\n\n /**\n * Set the parsed value of a key.\n *\n * @param string $key\n * @param array $parsed\n * @return void\n * @static\n */\n public static function setParsedKey($key, $parsed)\n {\n //Method inherited from \\Illuminate\\Support\\NamespacedItemResolver \n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setParsedKey($key, $parsed);\n }\n\n /**\n * Flush the cache of parsed keys.\n *\n * @return void\n * @static\n */\n public static function flushParsedKeys()\n {\n //Method inherited from \\Illuminate\\Support\\NamespacedItemResolver \n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->flushParsedKeys();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Translation\\Translator::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Translation\\Translator::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Translation\\Translator::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Translation\\Translator::flushMacros();\n }\n\n }\n /**\n * @method static void write(string $level, \\Illuminate\\Contracts\\Support\\Arrayable|\\Illuminate\\Contracts\\Support\\Jsonable|\\Illuminate\\Support\\Stringable|array|string $message, array $context = [])\n * @method static \\Illuminate\\Log\\Logger withContext(array $context = [])\n * @method static void listen(\\Closure $callback)\n * @method static \\Psr\\Log\\LoggerInterface getLogger()\n * @method static \\Illuminate\\Contracts\\Events\\Dispatcher getEventDispatcher()\n * @method static void setEventDispatcher(\\Illuminate\\Contracts\\Events\\Dispatcher $dispatcher)\n * @method static \\Illuminate\\Log\\Logger|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Log\\Logger|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Log\\LogManager\n */\n class Log {\n /**\n * Build an on-demand log channel.\n *\n * @param array $config\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new, on-demand aggregate logger instance.\n *\n * @param array $channels\n * @param string|null $channel\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function stack($channels, $channel = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->stack($channels, $channel);\n }\n\n /**\n * Get a log channel instance.\n *\n * @param string|null $channel\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function channel($channel = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->channel($channel);\n }\n\n /**\n * Get a log driver instance.\n *\n * @param string|null $driver\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Share context across channels and stacks.\n *\n * @param array $context\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function shareContext($context)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->shareContext($context);\n }\n\n /**\n * The context shared across channels and stacks.\n *\n * @return array\n * @static\n */\n public static function sharedContext()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->sharedContext();\n }\n\n /**\n * Flush the log context on all currently resolved channels.\n *\n * @param string[]|null $keys\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function withoutContext($keys = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->withoutContext($keys);\n }\n\n /**\n * Flush the shared context.\n *\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function flushSharedContext()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->flushSharedContext();\n }\n\n /**\n * Get the default log driver name.\n *\n * @return string|null\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default log driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Unset the given channel instance.\n *\n * @param string|null $driver\n * @return void\n * @static\n */\n public static function forgetChannel($driver = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->forgetChannel($driver);\n }\n\n /**\n * Get all of the resolved log channels.\n *\n * @return array\n * @static\n */\n public static function getChannels()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->getChannels();\n }\n\n /**\n * System is unusable.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function emergency($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->emergency($message, $context);\n }\n\n /**\n * Action must be taken immediately.\n * \n * Example: Entire website down, database unavailable, etc. This should\n * trigger the SMS alerts and wake you up.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function alert($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->alert($message, $context);\n }\n\n /**\n * Critical conditions.\n * \n * Example: Application component unavailable, unexpected exception.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function critical($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->critical($message, $context);\n }\n\n /**\n * Runtime errors that do not require immediate action but should typically\n * be logged and monitored.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function error($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->error($message, $context);\n }\n\n /**\n * Exceptional occurrences that are not errors.\n * \n * Example: Use of deprecated APIs, poor use of an API, undesirable things\n * that are not necessarily wrong.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function warning($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->warning($message, $context);\n }\n\n /**\n * Normal but significant events.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function notice($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->notice($message, $context);\n }\n\n /**\n * Interesting events.\n * \n * Example: User logs in, SQL logs.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function info($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->info($message, $context);\n }\n\n /**\n * Detailed debug information.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function debug($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->debug($message, $context);\n }\n\n /**\n * Logs with an arbitrary level.\n *\n * @param mixed $level\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function log($level, $message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->log($level, $message, $context);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->setApplication($app);\n }\n\n }\n /**\n * @method static void alwaysFrom(string $address, string|null $name = null)\n * @method static void alwaysReplyTo(string $address, string|null $name = null)\n * @method static void alwaysReturnPath(string $address)\n * @method static void alwaysTo(string $address, string|null $name = null)\n * @method static \\Illuminate\\Mail\\SentMessage|null html(string $html, mixed $callback)\n * @method static \\Illuminate\\Mail\\SentMessage|null plain(string $view, array $data, mixed $callback)\n * @method static string render(string|array $view, array $data = [])\n * @method static mixed onQueue(\\BackedEnum|string|null $queue, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static mixed queueOn(string $queue, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static mixed laterOn(string $queue, \\DateTimeInterface|\\DateInterval|int $delay, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static \\Symfony\\Component\\Mailer\\Transport\\TransportInterface getSymfonyTransport()\n * @method static \\Illuminate\\Contracts\\View\\Factory getViewFactory()\n * @method static void setSymfonyTransport(\\Symfony\\Component\\Mailer\\Transport\\TransportInterface $transport)\n * @method static \\Illuminate\\Mail\\Mailer setQueue(\\Illuminate\\Contracts\\Queue\\Factory $queue)\n * @method static void macro(string $name, object|callable $macro)\n * @method static void mixin(object $mixin, bool $replace = true)\n * @method static bool hasMacro(string $name)\n * @method static void flushMacros()\n * @see \\Illuminate\\Mail\\MailManager\n * @see \\Illuminate\\Support\\Testing\\Fakes\\MailFake\n */\n class Mail {\n /**\n * Get a mailer instance by name.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Mail\\Mailer\n * @static\n */\n public static function mailer($name = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->mailer($name);\n }\n\n /**\n * Get a mailer driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Mail\\Mailer\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Build a new mailer instance.\n *\n * @param array $config\n * @return \\Illuminate\\Mail\\Mailer\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new transport instance.\n *\n * @param array $config\n * @return \\Symfony\\Component\\Mailer\\Transport\\TransportInterface\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function createSymfonyTransport($config)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->createSymfonyTransport($config);\n }\n\n /**\n * Get the default mail driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default mail driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Disconnect the given mailer and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom transport creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Forget all of the resolved mailer instances.\n *\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function forgetMailers()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->forgetMailers();\n }\n\n /**\n * Assert if a mailable was sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|int|null $callback\n * @return void\n * @static\n */\n public static function assertSent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertSent($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not sent or queued to be sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotOutgoing($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotOutgoing($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|null $callback\n * @return void\n * @static\n */\n public static function assertNotSent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotSent($mailable, $callback);\n }\n\n /**\n * Assert that no mailables were sent or queued to be sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingOutgoing()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingOutgoing();\n }\n\n /**\n * Assert that no mailables were sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert if a mailable was queued based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|int|null $callback\n * @return void\n * @static\n */\n public static function assertQueued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertQueued($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not queued based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|null $callback\n * @return void\n * @static\n */\n public static function assertNotQueued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotQueued($mailable, $callback);\n }\n\n /**\n * Assert that no mailables were queued.\n *\n * @return void\n * @static\n */\n public static function assertNothingQueued()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingQueued();\n }\n\n /**\n * Assert the total number of mailables that were sent.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertSentCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertSentCount($count);\n }\n\n /**\n * Assert the total number of mailables that were queued.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertQueuedCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertQueuedCount($count);\n }\n\n /**\n * Assert the total number of mailables that were sent or queued.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertOutgoingCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertOutgoingCount($count);\n }\n\n /**\n * Get all of the mailables matching a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function sent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->sent($mailable, $callback);\n }\n\n /**\n * Determine if the given mailable has been sent.\n *\n * @param string $mailable\n * @return bool\n * @static\n */\n public static function hasSent($mailable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->hasSent($mailable);\n }\n\n /**\n * Get all of the queued mailables matching a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function queued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->queued($mailable, $callback);\n }\n\n /**\n * Determine if the given mailable has been queued.\n *\n * @param string $mailable\n * @return bool\n * @static\n */\n public static function hasQueued($mailable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->hasQueued($mailable);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function to($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->to($users);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function cc($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->cc($users);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function bcc($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->bcc($users);\n }\n\n /**\n * Send a new message with only a raw text part.\n *\n * @param string $text\n * @param \\Closure|string $callback\n * @return void\n * @static\n */\n public static function raw($text, $callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->raw($text, $callback);\n }\n\n /**\n * Send a new message using a view.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param array $data\n * @param \\Closure|string|null $callback\n * @return mixed|void\n * @static\n */\n public static function send($view, $data = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->send($view, $data, $callback);\n }\n\n /**\n * Send a new message synchronously using a view.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $mailable\n * @param array $data\n * @param \\Closure|string|null $callback\n * @return void\n * @static\n */\n public static function sendNow($mailable, $data = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->sendNow($mailable, $data, $callback);\n }\n\n /**\n * Queue a new message for sending.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function queue($view, $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->queue($view, $queue);\n }\n\n /**\n * Queue a new e-mail message for sending after (n) seconds.\n *\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function later($delay, $view, $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->later($delay, $view, $queue);\n }\n\n }\n /**\n * @see \\Illuminate\\Notifications\\ChannelManager\n * @see \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake\n */\n class Notification {\n /**\n * Send the given notification to the given notifiable entities.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $notifiables\n * @param mixed $notification\n * @return void\n * @static\n */\n public static function send($notifiables, $notification)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->send($notifiables, $notification);\n }\n\n /**\n * Send the given notification immediately.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $notifiables\n * @param mixed $notification\n * @param array|null $channels\n * @return void\n * @static\n */\n public static function sendNow($notifiables, $notification, $channels = null)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->sendNow($notifiables, $notification, $channels);\n }\n\n /**\n * Get a channel instance.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function channel($name = null)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->channel($name);\n }\n\n /**\n * Get the default channel driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Get the default channel driver name.\n *\n * @return string\n * @static\n */\n public static function deliversVia()\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->deliversVia();\n }\n\n /**\n * Set the default channel driver name.\n *\n * @param string $channel\n * @return void\n * @static\n */\n public static function deliverVia($channel)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->deliverVia($channel);\n }\n\n /**\n * Set the locale of notifications.\n *\n * @param string $locale\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function locale($locale)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->locale($locale);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->forgetDrivers();\n }\n\n /**\n * Assert if a notification was sent on-demand based on a truth-test callback.\n *\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertSentOnDemand($notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentOnDemand($notification, $callback);\n }\n\n /**\n * Assert if a notification was sent based on a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertSentTo($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentTo($notifiable, $notification, $callback);\n }\n\n /**\n * Assert if a notification was sent on-demand a number of times.\n *\n * @param string $notification\n * @param int $times\n * @return void\n * @static\n */\n public static function assertSentOnDemandTimes($notification, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentOnDemandTimes($notification, $times);\n }\n\n /**\n * Assert if a notification was sent a number of times.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @param int $times\n * @return void\n * @static\n */\n public static function assertSentToTimes($notifiable, $notification, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentToTimes($notifiable, $notification, $times);\n }\n\n /**\n * Determine if a notification was sent based on a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertNotSentTo($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNotSentTo($notifiable, $notification, $callback);\n }\n\n /**\n * Assert that no notifications were sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert that no notifications were sent to the given notifiable.\n *\n * @param mixed $notifiable\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertNothingSentTo($notifiable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNothingSentTo($notifiable);\n }\n\n /**\n * Assert the total amount of times a notification was sent.\n *\n * @param string $notification\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertSentTimes($notification, $expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentTimes($notification, $expectedCount);\n }\n\n /**\n * Assert the total count of notification that were sent.\n *\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertCount($expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertCount($expectedCount);\n }\n\n /**\n * Get all of the notifications matching a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function sent($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->sent($notifiable, $notification, $callback);\n }\n\n /**\n * Determine if there are more notifications left to inspect.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @return bool\n * @static\n */\n public static function hasSent($notifiable, $notification)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->hasSent($notifiable, $notification);\n }\n\n /**\n * Specify if notification should be serialized and restored when being \"pushed\" to the queue.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the notifications that have been sent.\n *\n * @return array\n * @static\n */\n public static function sentNotifications()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->sentNotifications();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::flushMacros();\n }\n\n }\n /**\n * @method static string sendResetLink(array $credentials, \\Closure|null $callback = null)\n * @method static mixed reset(array $credentials, \\Closure $callback)\n * @method static \\Illuminate\\Contracts\\Auth\\CanResetPassword|null getUser(array $credentials)\n * @method static string createToken(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user)\n * @method static void deleteToken(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user)\n * @method static bool tokenExists(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user, string $token)\n * @method static \\Illuminate\\Auth\\Passwords\\TokenRepositoryInterface getRepository()\n * @method static \\Illuminate\\Support\\Timebox getTimebox()\n * @see \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager\n * @see \\Illuminate\\Auth\\Passwords\\PasswordBroker\n */\n class Password {\n /**\n * Attempt to get the broker from the local cache.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Auth\\PasswordBroker\n * @static\n */\n public static function broker($name = null)\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n return $instance->broker($name);\n }\n\n /**\n * Get the default password broker name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default password broker name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n }\n /**\n * @method static \\Illuminate\\Process\\PendingProcess command(array|string $command)\n * @method static \\Illuminate\\Process\\PendingProcess path(string $path)\n * @method static \\Illuminate\\Process\\PendingProcess timeout(int $timeout)\n * @method static \\Illuminate\\Process\\PendingProcess idleTimeout(int $timeout)\n * @method static \\Illuminate\\Process\\PendingProcess forever()\n * @method static \\Illuminate\\Process\\PendingProcess env(array $environment)\n * @method static \\Illuminate\\Process\\PendingProcess input(\\Traversable|resource|string|int|float|bool|null $input)\n * @method static \\Illuminate\\Process\\PendingProcess quietly()\n * @method static \\Illuminate\\Process\\PendingProcess tty(bool $tty = true)\n * @method static \\Illuminate\\Process\\PendingProcess options(array $options)\n * @method static \\Illuminate\\Contracts\\Process\\ProcessResult run(array|string|null $command = null, callable|null $output = null)\n * @method static \\Illuminate\\Process\\InvokedProcess start(array|string|null $command = null, callable|null $output = null)\n * @method static bool supportsTty()\n * @method static \\Illuminate\\Process\\PendingProcess withFakeHandlers(array $fakeHandlers)\n * @method static \\Illuminate\\Process\\PendingProcess|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Process\\PendingProcess|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Process\\PendingProcess\n * @see \\Illuminate\\Process\\Factory\n */\n class Process {\n /**\n * Create a new fake process response for testing purposes.\n *\n * @param array|string $output\n * @param array|string $errorOutput\n * @param int $exitCode\n * @return \\Illuminate\\Process\\FakeProcessResult\n * @static\n */\n public static function result($output = '', $errorOutput = '', $exitCode = 0)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->result($output, $errorOutput, $exitCode);\n }\n\n /**\n * Begin describing a fake process lifecycle.\n *\n * @return \\Illuminate\\Process\\FakeProcessDescription\n * @static\n */\n public static function describe()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->describe();\n }\n\n /**\n * Begin describing a fake process sequence.\n *\n * @param array $processes\n * @return \\Illuminate\\Process\\FakeProcessSequence\n * @static\n */\n public static function sequence($processes = [])\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->sequence($processes);\n }\n\n /**\n * Indicate that the process factory should fake processes.\n *\n * @param \\Closure|array|null $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function fake($callback = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->fake($callback);\n }\n\n /**\n * Determine if the process factory has fake process handlers and is recording processes.\n *\n * @return bool\n * @static\n */\n public static function isRecording()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->isRecording();\n }\n\n /**\n * Record the given process if processes should be recorded.\n *\n * @param \\Illuminate\\Process\\PendingProcess $process\n * @param \\Illuminate\\Contracts\\Process\\ProcessResult $result\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function recordIfRecording($process, $result)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->recordIfRecording($process, $result);\n }\n\n /**\n * Record the given process.\n *\n * @param \\Illuminate\\Process\\PendingProcess $process\n * @param \\Illuminate\\Contracts\\Process\\ProcessResult $result\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function record($process, $result)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->record($process, $result);\n }\n\n /**\n * Indicate that an exception should be thrown if any process is not faked.\n *\n * @param bool $prevent\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function preventStrayProcesses($prevent = true)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->preventStrayProcesses($prevent);\n }\n\n /**\n * Determine if stray processes are being prevented.\n *\n * @return bool\n * @static\n */\n public static function preventingStrayProcesses()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->preventingStrayProcesses();\n }\n\n /**\n * Assert that a process was recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertRan($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertRan($callback);\n }\n\n /**\n * Assert that a process was recorded a given number of times matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @param int $times\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertRanTimes($callback, $times = 1)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertRanTimes($callback, $times);\n }\n\n /**\n * Assert that a process was not recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertNotRan($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertNotRan($callback);\n }\n\n /**\n * Assert that a process was not recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertDidntRun($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertDidntRun($callback);\n }\n\n /**\n * Assert that no processes were recorded.\n *\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertNothingRan()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertNothingRan();\n }\n\n /**\n * Start defining a pool of processes.\n *\n * @param callable $callback\n * @return \\Illuminate\\Process\\Pool\n * @static\n */\n public static function pool($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->pool($callback);\n }\n\n /**\n * Start defining a series of piped processes.\n *\n * @param callable|array $callback\n * @return \\Illuminate\\Contracts\\Process\\ProcessResult\n * @static\n */\n public static function pipe($callback, $output = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->pipe($callback, $output);\n }\n\n /**\n * Run a pool of processes and wait for them to finish executing.\n *\n * @param callable $callback\n * @param callable|null $output\n * @return \\Illuminate\\Process\\ProcessPoolResults\n * @static\n */\n public static function concurrently($callback, $output = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->concurrently($callback, $output);\n }\n\n /**\n * Create a new pending process associated with this factory.\n *\n * @return \\Illuminate\\Process\\PendingProcess\n * @static\n */\n public static function newPendingProcess()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->newPendingProcess();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Process\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Process\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Process\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Process\\Factory::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Queue\\QueueManager\n * @see \\Illuminate\\Queue\\Queue\n * @see \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n */\n class Queue {\n /**\n * Register an event listener for the before job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function before($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->before($callback);\n }\n\n /**\n * Register an event listener for the after job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function after($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->after($callback);\n }\n\n /**\n * Register an event listener for the exception occurred job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function exceptionOccurred($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->exceptionOccurred($callback);\n }\n\n /**\n * Register an event listener for the daemon queue loop.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function looping($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->looping($callback);\n }\n\n /**\n * Register an event listener for the failed job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function failing($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->failing($callback);\n }\n\n /**\n * Register an event listener for the daemon queue starting.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function starting($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->starting($callback);\n }\n\n /**\n * Register an event listener for the daemon queue stopping.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function stopping($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->stopping($callback);\n }\n\n /**\n * Determine if the driver is connected.\n *\n * @param string|null $name\n * @return bool\n * @static\n */\n public static function connected($name = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->connected($name);\n }\n\n /**\n * Resolve a queue connection instance.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Queue\\Queue\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Add a queue connection resolver.\n *\n * @param string $driver\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function extend($driver, $resolver)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->extend($driver, $resolver);\n }\n\n /**\n * Add a queue connection resolver.\n *\n * @param string $driver\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function addConnector($driver, $resolver)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->addConnector($driver, $resolver);\n }\n\n /**\n * Get the name of the default queue connection.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the name of the default queue connection.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Get the full name for the given connection.\n *\n * @param string|null $connection\n * @return string\n * @static\n */\n public static function getName($connection = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getName($connection);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Queue\\QueueManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Specify the jobs that should be queued instead of faked.\n *\n * @param array|string $jobsToBeQueued\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function except($jobsToBeQueued)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->except($jobsToBeQueued);\n }\n\n /**\n * Assert if a job was pushed based on a truth-test callback.\n *\n * @param string|\\Closure $job\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertPushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushed($job, $callback);\n }\n\n /**\n * Assert if a job was pushed based on a truth-test callback.\n *\n * @param string $queue\n * @param string|\\Closure $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedOn($queue, $job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedOn($queue, $job, $callback);\n }\n\n /**\n * Assert if a job was pushed with chained jobs based on a truth-test callback.\n *\n * @param string $job\n * @param array $expectedChain\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedWithChain($job, $expectedChain = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedWithChain($job, $expectedChain, $callback);\n }\n\n /**\n * Assert if a job was pushed with an empty chain based on a truth-test callback.\n *\n * @param string $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedWithoutChain($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedWithoutChain($job, $callback);\n }\n\n /**\n * Assert if a closure was pushed based on a truth-test callback.\n *\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertClosurePushed($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertClosurePushed($callback);\n }\n\n /**\n * Assert that a closure was not pushed based on a truth-test callback.\n *\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertClosureNotPushed($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertClosureNotPushed($callback);\n }\n\n /**\n * Determine if a job was pushed based on a truth-test callback.\n *\n * @param string|\\Closure $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotPushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertNotPushed($job, $callback);\n }\n\n /**\n * Assert the total count of jobs that were pushed.\n *\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertCount($expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertCount($expectedCount);\n }\n\n /**\n * Assert that no jobs were pushed.\n *\n * @return void\n * @static\n */\n public static function assertNothingPushed()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertNothingPushed();\n }\n\n /**\n * Get all of the jobs matching a truth-test callback.\n *\n * @param string $job\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function pushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushed($job, $callback);\n }\n\n /**\n * Get all of the raw pushes matching a truth-test callback.\n *\n * @param null|\\Closure(string, ?string, array): bool $callback\n * @return \\Illuminate\\Support\\Collection<int, RawPushType>\n * @static\n */\n public static function pushedRaw($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushedRaw($callback);\n }\n\n /**\n * Get all of the jobs by listener class, passing an optional truth-test callback.\n *\n * @param class-string $listenerClass\n * @param (\\Closure(mixed, \\Illuminate\\Events\\CallQueuedListener, string|null, mixed): bool)|null $callback\n * @return \\Illuminate\\Support\\Collection<int, \\Illuminate\\Events\\CallQueuedListener>\n * @static\n */\n public static function listenersPushed($listenerClass, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->listenersPushed($listenerClass, $callback);\n }\n\n /**\n * Determine if there are any stored jobs for a given class.\n *\n * @param string $job\n * @return bool\n * @static\n */\n public static function hasPushed($job)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->hasPushed($job);\n }\n\n /**\n * Get the size of the queue.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function size($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->size($queue);\n }\n\n /**\n * Get the number of pending jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function pendingSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pendingSize($queue);\n }\n\n /**\n * Get the number of delayed jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function delayedSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->delayedSize($queue);\n }\n\n /**\n * Get the number of reserved jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function reservedSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->reservedSize($queue);\n }\n\n /**\n * Get the creation timestamp of the oldest pending job, excluding delayed jobs.\n *\n * @param string|null $queue\n * @return int|null\n * @static\n */\n public static function creationTimeOfOldestPendingJob($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->creationTimeOfOldestPendingJob($queue);\n }\n\n /**\n * Push a new job onto the queue.\n *\n * @param string|object $job\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function push($job, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->push($job, $data, $queue);\n }\n\n /**\n * Determine if a job should be faked or actually dispatched.\n *\n * @param object $job\n * @return bool\n * @static\n */\n public static function shouldFakeJob($job)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->shouldFakeJob($job);\n }\n\n /**\n * Push a raw payload onto the queue.\n *\n * @param string $payload\n * @param string|null $queue\n * @param array $options\n * @return mixed\n * @static\n */\n public static function pushRaw($payload, $queue = null, $options = [])\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushRaw($payload, $queue, $options);\n }\n\n /**\n * Push a new job onto the queue after (n) seconds.\n *\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param string|object $job\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function later($delay, $job, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->later($delay, $job, $data, $queue);\n }\n\n /**\n * Push a new job onto the queue.\n *\n * @param string $queue\n * @param string|object $job\n * @param mixed $data\n * @return mixed\n * @static\n */\n public static function pushOn($queue, $job, $data = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushOn($queue, $job, $data);\n }\n\n /**\n * Push a new job onto a specific queue after (n) seconds.\n *\n * @param string $queue\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param string|object $job\n * @param mixed $data\n * @return mixed\n * @static\n */\n public static function laterOn($queue, $delay, $job, $data = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->laterOn($queue, $delay, $job, $data);\n }\n\n /**\n * Pop the next job off of the queue.\n *\n * @param string|null $queue\n * @return \\Illuminate\\Contracts\\Queue\\Job|null\n * @static\n */\n public static function pop($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pop($queue);\n }\n\n /**\n * Push an array of jobs onto the queue.\n *\n * @param array $jobs\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function bulk($jobs, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->bulk($jobs, $data, $queue);\n }\n\n /**\n * Get the jobs that have been pushed.\n *\n * @return array\n * @static\n */\n public static function pushedJobs()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushedJobs();\n }\n\n /**\n * Get the payloads that were pushed raw.\n *\n * @return list<RawPushType>\n * @static\n */\n public static function rawPushes()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->rawPushes();\n }\n\n /**\n * Specify if jobs should be serialized and restored when being \"pushed\" to the queue.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the connection name for the queue.\n *\n * @return string\n * @static\n */\n public static function getConnectionName()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->getConnectionName();\n }\n\n /**\n * Set the connection name for the queue.\n *\n * @param string $name\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function setConnectionName($name)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->setConnectionName($name);\n }\n\n /**\n * Migrate the delayed jobs that are ready to the regular queue.\n *\n * @param string $from\n * @param string $to\n * @return array\n * @static\n */\n public static function migrateExpiredJobs($from, $to)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->migrateExpiredJobs($from, $to);\n }\n\n /**\n * Delete a reserved job from the queue.\n *\n * @param string $queue\n * @param \\Illuminate\\Queue\\Jobs\\RedisJob $job\n * @return void\n * @static\n */\n public static function deleteReserved($queue, $job)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->deleteReserved($queue, $job);\n }\n\n /**\n * Delete a reserved job from the reserved queue and release it.\n *\n * @param string $queue\n * @param \\Illuminate\\Queue\\Jobs\\RedisJob $job\n * @param int $delay\n * @return void\n * @static\n */\n public static function deleteAndRelease($queue, $job, $delay)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->deleteAndRelease($queue, $job, $delay);\n }\n\n /**\n * Delete all of the jobs from the queue.\n *\n * @param string $queue\n * @return int\n * @static\n */\n public static function clear($queue)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->clear($queue);\n }\n\n /**\n * Get the queue or return the default.\n *\n * @param string|null $queue\n * @return string\n * @static\n */\n public static function getQueue($queue)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getQueue($queue);\n }\n\n /**\n * Get the connection for the queue.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function getConnection()\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getConnection();\n }\n\n /**\n * Get the underlying Redis instance.\n *\n * @return \\Illuminate\\Contracts\\Redis\\Factory\n * @static\n */\n public static function getRedis()\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getRedis();\n }\n\n /**\n * Get the maximum number of attempts for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobTries($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobTries($job);\n }\n\n /**\n * Get the backoff for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobBackoff($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobBackoff($job);\n }\n\n /**\n * Get the expiration timestamp for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobExpiration($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobExpiration($job);\n }\n\n /**\n * Register a callback to be executed when creating job payloads.\n *\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function createPayloadUsing($callback)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n \\Illuminate\\Queue\\RedisQueue::createPayloadUsing($callback);\n }\n\n /**\n * Get the container instance being used by the connection.\n *\n * @return \\Illuminate\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the IoC container instance.\n *\n * @param \\Illuminate\\Container\\Container $container\n * @return void\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->setContainer($container);\n }\n\n }\n /**\n * @see \\Illuminate\\Cache\\RateLimiter\n */\n class RateLimiter {\n /**\n * Register a named limiter configuration.\n *\n * @param \\BackedEnum|\\UnitEnum|string $name\n * @param \\Closure $callback\n * @return \\Illuminate\\Cache\\RateLimiter\n * @static\n */\n public static function for($name, $callback)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->for($name, $callback);\n }\n\n /**\n * Get the given named rate limiter.\n *\n * @param \\BackedEnum|\\UnitEnum|string $name\n * @return \\Closure|null\n * @static\n */\n public static function limiter($name)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->limiter($name);\n }\n\n /**\n * Attempts to execute a callback if it's not limited.\n *\n * @param string $key\n * @param int $maxAttempts\n * @param \\Closure $callback\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @return mixed\n * @static\n */\n public static function attempt($key, $maxAttempts, $callback, $decaySeconds = 60)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->attempt($key, $maxAttempts, $callback, $decaySeconds);\n }\n\n /**\n * Determine if the given key has been \"accessed\" too many times.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return bool\n * @static\n */\n public static function tooManyAttempts($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->tooManyAttempts($key, $maxAttempts);\n }\n\n /**\n * Increment (by 1) the counter for a given key for a given decay time.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @return int\n * @static\n */\n public static function hit($key, $decaySeconds = 60)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->hit($key, $decaySeconds);\n }\n\n /**\n * Increment the counter for a given key for a given decay time by a given amount.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @param int $amount\n * @return int\n * @static\n */\n public static function increment($key, $decaySeconds = 60, $amount = 1)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->increment($key, $decaySeconds, $amount);\n }\n\n /**\n * Decrement the counter for a given key for a given decay time by a given amount.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @param int $amount\n * @return int\n * @static\n */\n public static function decrement($key, $decaySeconds = 60, $amount = 1)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->decrement($key, $decaySeconds, $amount);\n }\n\n /**\n * Get the number of attempts for the given key.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function attempts($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->attempts($key);\n }\n\n /**\n * Reset the number of attempts for the given key.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function resetAttempts($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->resetAttempts($key);\n }\n\n /**\n * Get the number of retries left for the given key.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return int\n * @static\n */\n public static function remaining($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->remaining($key, $maxAttempts);\n }\n\n /**\n * Get the number of retries left for the given key.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return int\n * @static\n */\n public static function retriesLeft($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->retriesLeft($key, $maxAttempts);\n }\n\n /**\n * Clear the hits and lockout timer for the given key.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function clear($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n $instance->clear($key);\n }\n\n /**\n * Get the number of seconds until the \"key\" is accessible again.\n *\n * @param string $key\n * @return int\n * @static\n */\n public static function availableIn($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->availableIn($key);\n }\n\n /**\n * Clean the rate limiter key from unicode characters.\n *\n * @param string $key\n * @return string\n * @static\n */\n public static function cleanRateLimiterKey($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->cleanRateLimiterKey($key);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\Redirector\n */\n class Redirect {\n /**\n * Create a new redirect response to the previous location.\n *\n * @param int $status\n * @param array $headers\n * @param mixed $fallback\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function back($status = 302, $headers = [], $fallback = false)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->back($status, $headers, $fallback);\n }\n\n /**\n * Create a new redirect response to the current URI.\n *\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function refresh($status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->refresh($status, $headers);\n }\n\n /**\n * Create a new redirect response, while putting the current URL in the session.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function guest($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->guest($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the previously intended location.\n *\n * @param mixed $default\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function intended($default = '/', $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->intended($default, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the given path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function to($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->to($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to an external URL (no validation).\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function away($path, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->away($path, $status, $headers);\n }\n\n /**\n * Create a new redirect response to the given HTTPS path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function secure($path, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->secure($path, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function route($route, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->route($route, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a signed named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function signedRoute($route, $parameters = [], $expiration = null, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->signedRoute($route, $parameters, $expiration, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a signed named route.\n *\n * @param \\BackedEnum|string $route\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function temporarySignedRoute($route, $expiration, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->temporarySignedRoute($route, $expiration, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a controller action.\n *\n * @param string|array $action\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function action($action, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->action($action, $parameters, $status, $headers);\n }\n\n /**\n * Get the URL generator instance.\n *\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function getUrlGenerator()\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->getUrlGenerator();\n }\n\n /**\n * Set the active session store.\n *\n * @param \\Illuminate\\Session\\Store $session\n * @return void\n * @static\n */\n public static function setSession($session)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n $instance->setSession($session);\n }\n\n /**\n * Get the \"intended\" URL from the session.\n *\n * @return string|null\n * @static\n */\n public static function getIntendedUrl()\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->getIntendedUrl();\n }\n\n /**\n * Set the \"intended\" URL in the session.\n *\n * @param string $url\n * @return \\Illuminate\\Routing\\Redirector\n * @static\n */\n public static function setIntendedUrl($url)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->setIntendedUrl($url);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\Redirector::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\Redirector::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\Redirector::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\Redirector::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Http\\Request\n */\n class Request {\n /**\n * Create a new Illuminate HTTP request from server variables.\n *\n * @return static\n * @static\n */\n public static function capture()\n {\n return \\Illuminate\\Http\\Request::capture();\n }\n\n /**\n * Return the Request instance.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function instance()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->instance();\n }\n\n /**\n * Get the request method.\n *\n * @return string\n * @static\n */\n public static function method()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->method();\n }\n\n /**\n * Get a URI instance for the request.\n *\n * @return \\Illuminate\\Support\\Uri\n * @static\n */\n public static function uri()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->uri();\n }\n\n /**\n * Get the root URL for the application.\n *\n * @return string\n * @static\n */\n public static function root()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->root();\n }\n\n /**\n * Get the URL (no query string) for the request.\n *\n * @return string\n * @static\n */\n public static function url()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->url();\n }\n\n /**\n * Get the full URL for the request.\n *\n * @return string\n * @static\n */\n public static function fullUrl()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrl();\n }\n\n /**\n * Get the full URL for the request with the added query string parameters.\n *\n * @param array $query\n * @return string\n * @static\n */\n public static function fullUrlWithQuery($query)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlWithQuery($query);\n }\n\n /**\n * Get the full URL for the request without the given query string parameters.\n *\n * @param array|string $keys\n * @return string\n * @static\n */\n public static function fullUrlWithoutQuery($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlWithoutQuery($keys);\n }\n\n /**\n * Get the current path info for the request.\n *\n * @return string\n * @static\n */\n public static function path()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->path();\n }\n\n /**\n * Get the current decoded path info for the request.\n *\n * @return string\n * @static\n */\n public static function decodedPath()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->decodedPath();\n }\n\n /**\n * Get a segment from the URI (1 based index).\n *\n * @param int $index\n * @param string|null $default\n * @return string|null\n * @static\n */\n public static function segment($index, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->segment($index, $default);\n }\n\n /**\n * Get all of the segments for the request path.\n *\n * @return array\n * @static\n */\n public static function segments()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->segments();\n }\n\n /**\n * Determine if the current request URI matches a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function is(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->is(...$patterns);\n }\n\n /**\n * Determine if the route name matches a given pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function routeIs(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->routeIs(...$patterns);\n }\n\n /**\n * Determine if the current request URL and query string match a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function fullUrlIs(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlIs(...$patterns);\n }\n\n /**\n * Get the host name.\n *\n * @return string\n * @static\n */\n public static function host()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->host();\n }\n\n /**\n * Get the HTTP host being requested.\n *\n * @return string\n * @static\n */\n public static function httpHost()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->httpHost();\n }\n\n /**\n * Get the scheme and HTTP host.\n *\n * @return string\n * @static\n */\n public static function schemeAndHttpHost()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->schemeAndHttpHost();\n }\n\n /**\n * Determine if the request is the result of an AJAX call.\n *\n * @return bool\n * @static\n */\n public static function ajax()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ajax();\n }\n\n /**\n * Determine if the request is the result of a PJAX call.\n *\n * @return bool\n * @static\n */\n public static function pjax()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->pjax();\n }\n\n /**\n * Determine if the request is the result of a prefetch call.\n *\n * @return bool\n * @static\n */\n public static function prefetch()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->prefetch();\n }\n\n /**\n * Determine if the request is over HTTPS.\n *\n * @return bool\n * @static\n */\n public static function secure()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->secure();\n }\n\n /**\n * Get the client IP address.\n *\n * @return string|null\n * @static\n */\n public static function ip()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ip();\n }\n\n /**\n * Get the client IP addresses.\n *\n * @return array\n * @static\n */\n public static function ips()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ips();\n }\n\n /**\n * Get the client user agent.\n *\n * @return string|null\n * @static\n */\n public static function userAgent()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->userAgent();\n }\n\n /**\n * Merge new input into the current request's input array.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function merge($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->merge($input);\n }\n\n /**\n * Merge new input into the request's input, but only when that key is missing from the request.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function mergeIfMissing($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->mergeIfMissing($input);\n }\n\n /**\n * Replace the input values for the current request.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function replace($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->replace($input);\n }\n\n /**\n * This method belongs to Symfony HttpFoundation and is not usually needed when using Laravel.\n * \n * Instead, you may use the \"input\" method.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get the JSON payload for the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return ($key is null ? \\Symfony\\Component\\HttpFoundation\\InputBag : mixed)\n * @static\n */\n public static function json($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->json($key, $default);\n }\n\n /**\n * Create a new request instance from the given Laravel request.\n *\n * @param \\Illuminate\\Http\\Request $from\n * @param \\Illuminate\\Http\\Request|null $to\n * @return static\n * @static\n */\n public static function createFrom($from, $to = null)\n {\n return \\Illuminate\\Http\\Request::createFrom($from, $to);\n }\n\n /**\n * Create an Illuminate request from a Symfony instance.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @return static\n * @static\n */\n public static function createFromBase($request)\n {\n return \\Illuminate\\Http\\Request::createFromBase($request);\n }\n\n /**\n * Clones a request and overrides some of its parameters.\n *\n * @return static\n * @param array|null $query The GET parameters\n * @param array|null $request The POST parameters\n * @param array|null $attributes The request attributes (parameters parsed from the PATH_INFO, ...)\n * @param array|null $cookies The COOKIE parameters\n * @param array|null $files The FILES parameters\n * @param array|null $server The SERVER parameters\n * @static\n */\n public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->duplicate($query, $request, $attributes, $cookies, $files, $server);\n }\n\n /**\n * Whether the request contains a Session object.\n * \n * This method does not give any information about the state of the session object,\n * like whether the session is started or not. It is just a way to check if this Request\n * is associated with a Session instance.\n *\n * @param bool $skipIfUninitialized When true, ignores factories injected by `setSessionFactory`\n * @static\n */\n public static function hasSession($skipIfUninitialized = false)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasSession($skipIfUninitialized);\n }\n\n /**\n * Gets the Session.\n *\n * @throws SessionNotFoundException When session is not set properly\n * @static\n */\n public static function getSession()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getSession();\n }\n\n /**\n * Get the session associated with the request.\n *\n * @return \\Illuminate\\Contracts\\Session\\Session\n * @throws \\RuntimeException\n * @static\n */\n public static function session()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->session();\n }\n\n /**\n * Set the session instance on the request.\n *\n * @param \\Illuminate\\Contracts\\Session\\Session $session\n * @return void\n * @static\n */\n public static function setLaravelSession($session)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setLaravelSession($session);\n }\n\n /**\n * Set the locale for the request instance.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setRequestLocale($locale)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setRequestLocale($locale);\n }\n\n /**\n * Set the default locale for the request instance.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setDefaultRequestLocale($locale)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setDefaultRequestLocale($locale);\n }\n\n /**\n * Get the user making the request.\n *\n * @param string|null $guard\n * @return mixed\n * @static\n */\n public static function user($guard = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->user($guard);\n }\n\n /**\n * Get the route handling the request.\n *\n * @param string|null $param\n * @param mixed $default\n * @return ($param is null ? \\Illuminate\\Routing\\Route : object|string|null)\n * @static\n */\n public static function route($param = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->route($param, $default);\n }\n\n /**\n * Get a unique fingerprint for the request / route / IP address.\n *\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function fingerprint()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fingerprint();\n }\n\n /**\n * Set the JSON payload for the request.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\InputBag $json\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setJson($json)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setJson($json);\n }\n\n /**\n * Get the user resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function getUserResolver()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUserResolver();\n }\n\n /**\n * Set the user resolver callback.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setUserResolver($callback)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setUserResolver($callback);\n }\n\n /**\n * Get the route resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function getRouteResolver()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRouteResolver();\n }\n\n /**\n * Set the route resolver callback.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setRouteResolver($callback)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setRouteResolver($callback);\n }\n\n /**\n * Get all of the input and files for the request.\n *\n * @return array\n * @static\n */\n public static function toArray()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->toArray();\n }\n\n /**\n * Determine if the given offset exists.\n *\n * @param string $offset\n * @return bool\n * @static\n */\n public static function offsetExists($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->offsetExists($offset);\n }\n\n /**\n * Get the value at the given offset.\n *\n * @param string $offset\n * @return mixed\n * @static\n */\n public static function offsetGet($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->offsetGet($offset);\n }\n\n /**\n * Set the value at the given offset.\n *\n * @param string $offset\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($offset, $value)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->offsetSet($offset, $value);\n }\n\n /**\n * Remove the value at the given offset.\n *\n * @param string $offset\n * @return void\n * @static\n */\n public static function offsetUnset($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->offsetUnset($offset);\n }\n\n /**\n * Sets the parameters for this request.\n * \n * This method also re-initializes all properties.\n *\n * @param array $query The GET parameters\n * @param array $request The POST parameters\n * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...)\n * @param array $cookies The COOKIE parameters\n * @param array $files The FILES parameters\n * @param array $server The SERVER parameters\n * @param string|resource|null $content The raw body data\n * @static\n */\n public static function initialize($query = [], $request = [], $attributes = [], $cookies = [], $files = [], $server = [], $content = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->initialize($query, $request, $attributes, $cookies, $files, $server, $content);\n }\n\n /**\n * Creates a new request with values from PHP's super globals.\n *\n * @static\n */\n public static function createFromGlobals()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::createFromGlobals();\n }\n\n /**\n * Creates a Request based on a given URI and configuration.\n * \n * The information contained in the URI always take precedence\n * over the other information (server and parameters).\n *\n * @param string $uri The URI\n * @param string $method The HTTP method\n * @param array $parameters The query (GET) or request (POST) parameters\n * @param array $cookies The request cookies ($_COOKIE)\n * @param array $files The request files ($_FILES)\n * @param array $server The server parameters ($_SERVER)\n * @param string|resource|null $content The raw body data\n * @throws BadRequestException When the URI is invalid\n * @static\n */\n public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::create($uri, $method, $parameters, $cookies, $files, $server, $content);\n }\n\n /**\n * Sets a callable able to create a Request instance.\n * \n * This is mainly useful when you need to override the Request class\n * to keep BC with an existing system. It should not be used for any\n * other purpose.\n *\n * @static\n */\n public static function setFactory($callable)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setFactory($callable);\n }\n\n /**\n * Overrides the PHP global variables according to this request instance.\n * \n * It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE.\n * $_FILES is never overridden, see rfc1867\n *\n * @static\n */\n public static function overrideGlobals()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->overrideGlobals();\n }\n\n /**\n * Sets a list of trusted proxies.\n * \n * You should only list the reverse proxies that you manage directly.\n *\n * @param array $proxies A list of trusted proxies, the string 'REMOTE_ADDR' will be replaced with $_SERVER['REMOTE_ADDR'] and 'PRIVATE_SUBNETS' by IpUtils::PRIVATE_SUBNETS\n * @param int-mask-of<Request::HEADER_*> $trustedHeaderSet A bit field to set which headers to trust from your proxies\n * @static\n */\n public static function setTrustedProxies($proxies, $trustedHeaderSet)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setTrustedProxies($proxies, $trustedHeaderSet);\n }\n\n /**\n * Gets the list of trusted proxies.\n *\n * @return string[]\n * @static\n */\n public static function getTrustedProxies()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedProxies();\n }\n\n /**\n * Gets the set of trusted headers from trusted proxies.\n *\n * @return int A bit field of Request::HEADER_* that defines which headers are trusted from your proxies\n * @static\n */\n public static function getTrustedHeaderSet()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedHeaderSet();\n }\n\n /**\n * Sets a list of trusted host patterns.\n * \n * You should only list the hosts you manage using regexs.\n *\n * @param array $hostPatterns A list of trusted host patterns\n * @static\n */\n public static function setTrustedHosts($hostPatterns)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setTrustedHosts($hostPatterns);\n }\n\n /**\n * Gets the list of trusted host patterns.\n *\n * @return string[]\n * @static\n */\n public static function getTrustedHosts()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedHosts();\n }\n\n /**\n * Normalizes a query string.\n * \n * It builds a normalized query string, where keys/value pairs are alphabetized,\n * have consistent escaping and unneeded delimiters are removed.\n *\n * @static\n */\n public static function normalizeQueryString($qs)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::normalizeQueryString($qs);\n }\n\n /**\n * Enables support for the _method request parameter to determine the intended HTTP method.\n * \n * Be warned that enabling this feature might lead to CSRF issues in your code.\n * Check that you are using CSRF tokens when required.\n * If the HTTP method parameter override is enabled, an html-form with method \"POST\" can be altered\n * and used to send a \"PUT\" or \"DELETE\" request via the _method request parameter.\n * If these methods are not protected against CSRF, this presents a possible vulnerability.\n * \n * The HTTP method can only be overridden when the real HTTP method is POST.\n *\n * @static\n */\n public static function enableHttpMethodParameterOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::enableHttpMethodParameterOverride();\n }\n\n /**\n * Checks whether support for the _method request parameter is enabled.\n *\n * @static\n */\n public static function getHttpMethodParameterOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getHttpMethodParameterOverride();\n }\n\n /**\n * Sets the list of HTTP methods that can be overridden.\n * \n * Set to null to allow all methods to be overridden (default). Set to an\n * empty array to disallow overrides entirely. Otherwise, provide the list\n * of uppercased method names that are allowed.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\uppercase-string[]|null $methods\n * @static\n */\n public static function setAllowedHttpMethodOverride($methods)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setAllowedHttpMethodOverride($methods);\n }\n\n /**\n * Gets the list of HTTP methods that can be overridden.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\uppercase-string[]|null\n * @static\n */\n public static function getAllowedHttpMethodOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getAllowedHttpMethodOverride();\n }\n\n /**\n * Whether the request contains a Session which was started in one of the\n * previous requests.\n *\n * @static\n */\n public static function hasPreviousSession()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasPreviousSession();\n }\n\n /**\n * @static\n */\n public static function setSession($session)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setSession($session);\n }\n\n /**\n * @internal\n * @param callable(): SessionInterface $factory\n * @static\n */\n public static function setSessionFactory($factory)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setSessionFactory($factory);\n }\n\n /**\n * Returns the client IP addresses.\n * \n * In the returned array the most trusted IP address is first, and the\n * least trusted one last. The \"real\" client IP address is the last one,\n * but this is also the least trusted one. Trusted proxies are stripped.\n * \n * Use this method carefully; you should use getClientIp() instead.\n *\n * @see getClientIp()\n * @static\n */\n public static function getClientIps()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getClientIps();\n }\n\n /**\n * Returns the client IP address.\n * \n * This method can read the client IP address from the \"X-Forwarded-For\" header\n * when trusted proxies were set via \"setTrustedProxies()\". The \"X-Forwarded-For\"\n * header value is a comma+space separated list of IP addresses, the left-most\n * being the original client, and each successive proxy that passed the request\n * adding the IP address where it received the request from.\n * \n * If your reverse proxy uses a different header name than \"X-Forwarded-For\",\n * (\"Client-Ip\" for instance), configure it via the $trustedHeaderSet\n * argument of the Request::setTrustedProxies() method instead.\n *\n * @see getClientIps()\n * @see https://wikipedia.org/wiki/X-Forwarded-For\n * @static\n */\n public static function getClientIp()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getClientIp();\n }\n\n /**\n * Returns current script name.\n *\n * @static\n */\n public static function getScriptName()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getScriptName();\n }\n\n /**\n * Returns the path being requested relative to the executed script.\n * \n * The path info always starts with a /.\n * \n * Suppose this request is instantiated from /mysite on localhost:\n * \n * * http://localhost/mysite returns an empty string\n * * http://localhost/mysite/about returns '/about'\n * * http://localhost/mysite/enco%20ded returns '/enco%20ded'\n * * http://localhost/mysite/about?var=1 returns '/about'\n *\n * @return string The raw path (i.e. not urldecoded)\n * @static\n */\n public static function getPathInfo()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPathInfo();\n }\n\n /**\n * Returns the root path from which this request is executed.\n * \n * Suppose that an index.php file instantiates this request object:\n * \n * * http://localhost/index.php returns an empty string\n * * http://localhost/index.php/page returns an empty string\n * * http://localhost/web/index.php returns '/web'\n * * http://localhost/we%20b/index.php returns '/we%20b'\n *\n * @return string The raw path (i.e. not urldecoded)\n * @static\n */\n public static function getBasePath()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getBasePath();\n }\n\n /**\n * Returns the root URL from which this request is executed.\n * \n * The base URL never ends with a /.\n * \n * This is similar to getBasePath(), except that it also includes the\n * script filename (e.g. index.php) if one exists.\n *\n * @return string The raw URL (i.e. not urldecoded)\n * @static\n */\n public static function getBaseUrl()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getBaseUrl();\n }\n\n /**\n * Gets the request's scheme.\n *\n * @static\n */\n public static function getScheme()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getScheme();\n }\n\n /**\n * Returns the port on which the request is made.\n * \n * This method can read the client port from the \"X-Forwarded-Port\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Port\" header must contain the client port.\n *\n * @return int|string|null Can be a string if fetched from the server bag\n * @static\n */\n public static function getPort()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPort();\n }\n\n /**\n * Returns the user.\n *\n * @static\n */\n public static function getUser()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUser();\n }\n\n /**\n * Returns the password.\n *\n * @static\n */\n public static function getPassword()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPassword();\n }\n\n /**\n * Gets the user info.\n *\n * @return string|null A user name if any and, optionally, scheme-specific information about how to gain authorization to access the server\n * @static\n */\n public static function getUserInfo()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUserInfo();\n }\n\n /**\n * Returns the HTTP host being requested.\n * \n * The port name will be appended to the host if it's non-standard.\n *\n * @static\n */\n public static function getHttpHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getHttpHost();\n }\n\n /**\n * Returns the requested URI (path and query string).\n *\n * @return string The raw URI (i.e. not URI decoded)\n * @static\n */\n public static function getRequestUri()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRequestUri();\n }\n\n /**\n * Gets the scheme and HTTP host.\n * \n * If the URL was called with basic authentication, the user\n * and the password are not added to the generated string.\n *\n * @static\n */\n public static function getSchemeAndHttpHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getSchemeAndHttpHost();\n }\n\n /**\n * Generates a normalized URI (URL) for the Request.\n *\n * @see getQueryString()\n * @static\n */\n public static function getUri()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUri();\n }\n\n /**\n * Generates a normalized URI for the given path.\n *\n * @param string $path A path to use instead of the current one\n * @static\n */\n public static function getUriForPath($path)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUriForPath($path);\n }\n\n /**\n * Returns the path as relative reference from the current Request path.\n * \n * Only the URIs path component (no schema, host etc.) is relevant and must be given.\n * Both paths must be absolute and not contain relative parts.\n * Relative URLs from one resource to another are useful when generating self-contained downloadable document archives.\n * Furthermore, they can be used to reduce the link size in documents.\n * \n * Example target paths, given a base path of \"/a/b/c/d\":\n * - \"/a/b/c/d\" -> \"\"\n * - \"/a/b/c/\" -> \"./\"\n * - \"/a/b/\" -> \"../\"\n * - \"/a/b/c/other\" -> \"other\"\n * - \"/a/x/y\" -> \"../../x/y\"\n *\n * @static\n */\n public static function getRelativeUriForPath($path)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRelativeUriForPath($path);\n }\n\n /**\n * Generates the normalized query string for the Request.\n * \n * It builds a normalized query string, where keys/value pairs are alphabetized\n * and have consistent escaping.\n *\n * @static\n */\n public static function getQueryString()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getQueryString();\n }\n\n /**\n * Checks whether the request is secure or not.\n * \n * This method can read the client protocol from the \"X-Forwarded-Proto\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Proto\" header must contain the protocol: \"https\" or \"http\".\n *\n * @static\n */\n public static function isSecure()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isSecure();\n }\n\n /**\n * Returns the host name.\n * \n * This method can read the client host name from the \"X-Forwarded-Host\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Host\" header must contain the client host name.\n *\n * @throws SuspiciousOperationException when the host name is invalid or not trusted\n * @static\n */\n public static function getHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getHost();\n }\n\n /**\n * Sets the request method.\n *\n * @static\n */\n public static function setMethod($method)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setMethod($method);\n }\n\n /**\n * Gets the request \"intended\" method.\n * \n * If the X-HTTP-Method-Override header is set, and if the method is a POST,\n * then it is used to determine the \"real\" intended HTTP method.\n * \n * The _method request parameter can also be used to determine the HTTP method,\n * but only if enableHttpMethodParameterOverride() has been called.\n * \n * The method is always an uppercased string.\n *\n * @see getRealMethod()\n * @static\n */\n public static function getMethod()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getMethod();\n }\n\n /**\n * Gets the \"real\" request method.\n *\n * @see getMethod()\n * @static\n */\n public static function getRealMethod()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRealMethod();\n }\n\n /**\n * Gets the mime type associated with the format.\n *\n * @static\n */\n public static function getMimeType($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getMimeType($format);\n }\n\n /**\n * Gets the mime types associated with the format.\n *\n * @return string[]\n * @static\n */\n public static function getMimeTypes($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getMimeTypes($format);\n }\n\n /**\n * Gets the format associated with the mime type.\n * \n * Resolution order:\n * 1) Exact match on the full MIME type (e.g. \"application/json\").\n * 2) Match on the canonical MIME type (i.e. before the first \";\" parameter).\n * 3) If the type is \"application/*+suffix\", use the structured syntax suffix\n * mapping (e.g. \"application/foo+json\" → \"json\"), when available.\n * 4) If $subtypeFallback is true and no match was found:\n * - return the MIME subtype (without \"x-\" prefix), provided it does not\n * contain a \"+\" (e.g. \"application/x-yaml\" → \"yaml\", \"text/csv\" → \"csv\").\n *\n * @param string|null $mimeType The mime type to check\n * @param bool $subtypeFallback Whether to fall back to the subtype if no exact match is found\n * @static\n */\n public static function getFormat($mimeType)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getFormat($mimeType);\n }\n\n /**\n * Associates a format with mime types.\n *\n * @param string $format The format to set\n * @param string|string[] $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type)\n * @static\n */\n public static function setFormat($format, $mimeTypes)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setFormat($format, $mimeTypes);\n }\n\n /**\n * Gets the request format.\n * \n * Here is the process to determine the format:\n * \n * * format defined by the user (with setRequestFormat())\n * * _format request attribute\n * * $default\n *\n * @see getPreferredFormat\n * @static\n */\n public static function getRequestFormat($default = 'html')\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRequestFormat($default);\n }\n\n /**\n * Sets the request format.\n *\n * @static\n */\n public static function setRequestFormat($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setRequestFormat($format);\n }\n\n /**\n * Gets the usual name of the format associated with the request's media type (provided in the Content-Type header).\n *\n * @see Request::$formats\n * @static\n */\n public static function getContentTypeFormat()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getContentTypeFormat();\n }\n\n /**\n * Sets the default locale.\n *\n * @static\n */\n public static function setDefaultLocale($locale)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setDefaultLocale($locale);\n }\n\n /**\n * Get the default locale.\n *\n * @static\n */\n public static function getDefaultLocale()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getDefaultLocale();\n }\n\n /**\n * Sets the locale.\n *\n * @static\n */\n public static function setLocale($locale)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setLocale($locale);\n }\n\n /**\n * Get the locale.\n *\n * @static\n */\n public static function getLocale()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getLocale();\n }\n\n /**\n * Checks if the request method is of specified type.\n *\n * @param string $method Uppercase request method (GET, POST etc)\n * @static\n */\n public static function isMethod($method)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethod($method);\n }\n\n /**\n * Checks whether or not the method is safe.\n *\n * @see https://tools.ietf.org/html/rfc7231#section-4.2.1\n * @static\n */\n public static function isMethodSafe()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodSafe();\n }\n\n /**\n * Checks whether or not the method is idempotent.\n *\n * @static\n */\n public static function isMethodIdempotent()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodIdempotent();\n }\n\n /**\n * Checks whether the method is cacheable or not.\n *\n * @see https://tools.ietf.org/html/rfc7231#section-4.2.3\n * @static\n */\n public static function isMethodCacheable()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodCacheable();\n }\n\n /**\n * Returns the protocol version.\n * \n * If the application is behind a proxy, the protocol version used in the\n * requests between the client and the proxy and between the proxy and the\n * server might be different. This returns the former (from the \"Via\" header)\n * if the proxy is trusted (see \"setTrustedProxies()\"), otherwise it returns\n * the latter (from the \"SERVER_PROTOCOL\" server parameter).\n *\n * @static\n */\n public static function getProtocolVersion()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getProtocolVersion();\n }\n\n /**\n * Returns the request body content.\n *\n * @param bool $asResource If true, a resource will be returned\n * @return string|resource\n * @psalm-return ($asResource is true ? resource : string)\n * @static\n */\n public static function getContent($asResource = false)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getContent($asResource);\n }\n\n /**\n * Gets the decoded form or json request body.\n *\n * @throws JsonException When the body cannot be decoded to an array\n * @static\n */\n public static function getPayload()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPayload();\n }\n\n /**\n * Gets the Etags.\n *\n * @static\n */\n public static function getETags()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getETags();\n }\n\n /**\n * @static\n */\n public static function isNoCache()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isNoCache();\n }\n\n /**\n * Gets the preferred format for the response by inspecting, in the following order:\n * * the request format set using setRequestFormat;\n * * the values of the Accept HTTP header.\n * \n * Note that if you use this method, you should send the \"Vary: Accept\" header\n * in the response to prevent any issues with intermediary HTTP caches.\n *\n * @static\n */\n public static function getPreferredFormat($default = 'html')\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPreferredFormat($default);\n }\n\n /**\n * Returns the preferred language.\n *\n * @param string[] $locales An array of ordered available locales\n * @static\n */\n public static function getPreferredLanguage($locales = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPreferredLanguage($locales);\n }\n\n /**\n * Gets a list of languages acceptable by the client browser ordered in the user browser preferences.\n *\n * @return string[]\n * @static\n */\n public static function getLanguages()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getLanguages();\n }\n\n /**\n * Gets a list of charsets acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getCharsets()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getCharsets();\n }\n\n /**\n * Gets a list of encodings acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getEncodings()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getEncodings();\n }\n\n /**\n * Gets a list of content types acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getAcceptableContentTypes()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getAcceptableContentTypes();\n }\n\n /**\n * Returns true if the request is an XMLHttpRequest.\n * \n * It works if your JavaScript library sets an X-Requested-With HTTP header.\n * It is known to work with common JavaScript frameworks:\n *\n * @see https://wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript\n * @static\n */\n public static function isXmlHttpRequest()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isXmlHttpRequest();\n }\n\n /**\n * Checks whether the client browser prefers safe content or not according to RFC8674.\n *\n * @see https://tools.ietf.org/html/rfc8674\n * @static\n */\n public static function preferSafeContent()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->preferSafeContent();\n }\n\n /**\n * Indicates whether this request originated from a trusted proxy.\n * \n * This can be useful to determine whether or not to trust the\n * contents of a proxy-specific header.\n *\n * @static\n */\n public static function isFromTrustedProxy()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isFromTrustedProxy();\n }\n\n /**\n * Filter the given array of rules into an array of rules that are included in precognitive headers.\n *\n * @param array $rules\n * @return array\n * @static\n */\n public static function filterPrecognitiveRules($rules)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->filterPrecognitiveRules($rules);\n }\n\n /**\n * Determine if the request is attempting to be precognitive.\n *\n * @return bool\n * @static\n */\n public static function isAttemptingPrecognition()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isAttemptingPrecognition();\n }\n\n /**\n * Determine if the request is precognitive.\n *\n * @return bool\n * @static\n */\n public static function isPrecognitive()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isPrecognitive();\n }\n\n /**\n * Determine if the request is sending JSON.\n *\n * @return bool\n * @static\n */\n public static function isJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isJson();\n }\n\n /**\n * Determine if the current request probably expects a JSON response.\n *\n * @return bool\n * @static\n */\n public static function expectsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->expectsJson();\n }\n\n /**\n * Determine if the current request is asking for JSON.\n *\n * @return bool\n * @static\n */\n public static function wantsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->wantsJson();\n }\n\n /**\n * Determines whether the current requests accepts a given content type.\n *\n * @param string|array $contentTypes\n * @return bool\n * @static\n */\n public static function accepts($contentTypes)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->accepts($contentTypes);\n }\n\n /**\n * Return the most suitable content type from the given array based on content negotiation.\n *\n * @param string|array $contentTypes\n * @return string|null\n * @static\n */\n public static function prefers($contentTypes)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->prefers($contentTypes);\n }\n\n /**\n * Determine if the current request accepts any content type.\n *\n * @return bool\n * @static\n */\n public static function acceptsAnyContentType()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsAnyContentType();\n }\n\n /**\n * Determines whether a request accepts JSON.\n *\n * @return bool\n * @static\n */\n public static function acceptsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsJson();\n }\n\n /**\n * Determines whether a request accepts HTML.\n *\n * @return bool\n * @static\n */\n public static function acceptsHtml()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsHtml();\n }\n\n /**\n * Determine if the given content types match.\n *\n * @param string $actual\n * @param string $type\n * @return bool\n * @static\n */\n public static function matchesType($actual, $type)\n {\n return \\Illuminate\\Http\\Request::matchesType($actual, $type);\n }\n\n /**\n * Get the data format expected in the response.\n *\n * @param string $default\n * @return string\n * @static\n */\n public static function format($default = 'html')\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->format($default);\n }\n\n /**\n * Retrieve an old input item.\n *\n * @param string|null $key\n * @param \\Illuminate\\Database\\Eloquent\\Model|string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function old($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->old($key, $default);\n }\n\n /**\n * Flash the input for the current request to the session.\n *\n * @return void\n * @static\n */\n public static function flash()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flash();\n }\n\n /**\n * Flash only some of the input to the session.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function flashOnly($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flashOnly($keys);\n }\n\n /**\n * Flash only some of the input to the session.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function flashExcept($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flashExcept($keys);\n }\n\n /**\n * Flush all of the old input from the session.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flush();\n }\n\n /**\n * Retrieve a server variable from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function server($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->server($key, $default);\n }\n\n /**\n * Determine if a header is set on the request.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasHeader($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasHeader($key);\n }\n\n /**\n * Retrieve a header from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function header($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->header($key, $default);\n }\n\n /**\n * Get the bearer token from the request headers.\n *\n * @return string|null\n * @static\n */\n public static function bearerToken()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->bearerToken();\n }\n\n /**\n * Get the keys for all of the input and files.\n *\n * @return array\n * @static\n */\n public static function keys()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->keys();\n }\n\n /**\n * Get all of the input and files for the request.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function all($keys = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->all($keys);\n }\n\n /**\n * Retrieve an input item from the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function input($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->input($key, $default);\n }\n\n /**\n * Retrieve input from the request as a Fluent object instance.\n *\n * @param array|string|null $key\n * @return \\Illuminate\\Support\\Fluent\n * @static\n */\n public static function fluent($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fluent($key);\n }\n\n /**\n * Retrieve a query string item from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function query($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->query($key, $default);\n }\n\n /**\n * Retrieve a request payload item from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function post($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->post($key, $default);\n }\n\n /**\n * Determine if a cookie is set on the request.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasCookie($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasCookie($key);\n }\n\n /**\n * Retrieve a cookie from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function cookie($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->cookie($key, $default);\n }\n\n /**\n * Get an array of all of the files on the request.\n *\n * @return array<string, \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]>\n * @static\n */\n public static function allFiles()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->allFiles();\n }\n\n /**\n * Determine if the uploaded data contains a file.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasFile($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasFile($key);\n }\n\n /**\n * Retrieve a file from the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return ($key is null ? array<string, \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]> : \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]|null)\n * @static\n */\n public static function file($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->file($key, $default);\n }\n\n /**\n * Dump the items.\n *\n * @param mixed $keys\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function dump($keys = [])\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->dump($keys);\n }\n\n /**\n * Dump the given arguments and terminate execution.\n *\n * @param mixed $args\n * @return never\n * @static\n */\n public static function dd(...$args)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->dd(...$args);\n }\n\n /**\n * Determine if the data contains a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function exists($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->exists($key);\n }\n\n /**\n * Determine if the data contains a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if the instance contains any of the given keys.\n *\n * @param string|array $keys\n * @return bool\n * @static\n */\n public static function hasAny($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasAny($keys);\n }\n\n /**\n * Apply the callback if the instance contains the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenHas($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenHas($key, $callback, $default);\n }\n\n /**\n * Determine if the instance contains a non-empty value for the given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function filled($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->filled($key);\n }\n\n /**\n * Determine if the instance contains an empty value for the given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function isNotFilled($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isNotFilled($key);\n }\n\n /**\n * Determine if the instance contains a non-empty value for any of the given keys.\n *\n * @param string|array $keys\n * @return bool\n * @static\n */\n public static function anyFilled($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->anyFilled($keys);\n }\n\n /**\n * Apply the callback if the instance contains a non-empty value for the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenFilled($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenFilled($key, $callback, $default);\n }\n\n /**\n * Determine if the instance is missing a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->missing($key);\n }\n\n /**\n * Apply the callback if the instance is missing the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenMissing($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenMissing($key, $callback, $default);\n }\n\n /**\n * Retrieve data from the instance as a Stringable instance.\n *\n * @param string $key\n * @param mixed $default\n * @return \\Illuminate\\Support\\Stringable\n * @static\n */\n public static function str($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->str($key, $default);\n }\n\n /**\n * Retrieve data from the instance as a Stringable instance.\n *\n * @param string $key\n * @param mixed $default\n * @return \\Illuminate\\Support\\Stringable\n * @static\n */\n public static function string($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->string($key, $default);\n }\n\n /**\n * Retrieve data as a boolean value.\n * \n * Returns true when value is \"1\", \"true\", \"on\", and \"yes\". Otherwise, returns false.\n *\n * @param string|null $key\n * @param bool $default\n * @return bool\n * @static\n */\n public static function boolean($key = null, $default = false)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->boolean($key, $default);\n }\n\n /**\n * Retrieve data as an integer value.\n *\n * @param string $key\n * @param int $default\n * @return int\n * @static\n */\n public static function integer($key, $default = 0)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->integer($key, $default);\n }\n\n /**\n * Retrieve data as a float value.\n *\n * @param string $key\n * @param float $default\n * @return float\n * @static\n */\n public static function float($key, $default = 0.0)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->float($key, $default);\n }\n\n /**\n * Retrieve data from the instance as a Carbon instance.\n *\n * @param string $key\n * @param string|null $format\n * @param \\UnitEnum|string|null $tz\n * @return \\Illuminate\\Support\\Carbon|null\n * @throws \\Carbon\\Exceptions\\InvalidFormatException\n * @static\n */\n public static function date($key, $format = null, $tz = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->date($key, $format, $tz);\n }\n\n /**\n * Retrieve data from the instance as an enum.\n *\n * @template TEnum of \\BackedEnum\n * @param string $key\n * @param class-string<TEnum> $enumClass\n * @param TEnum|null $default\n * @return TEnum|null\n * @static\n */\n public static function enum($key, $enumClass, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->enum($key, $enumClass, $default);\n }\n\n /**\n * Retrieve data from the instance as an array of enums.\n *\n * @template TEnum of \\BackedEnum\n * @param string $key\n * @param class-string<TEnum> $enumClass\n * @return TEnum[]\n * @static\n */\n public static function enums($key, $enumClass)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->enums($key, $enumClass);\n }\n\n /**\n * Retrieve data from the instance as an array.\n *\n * @param array|string|null $key\n * @return array\n * @static\n */\n public static function array($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->array($key);\n }\n\n /**\n * Retrieve data from the instance as a collection.\n *\n * @param array|string|null $key\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function collect($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->collect($key);\n }\n\n /**\n * Get a subset containing the provided keys with values from the instance data.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->only($keys);\n }\n\n /**\n * Get all of the data except for a specified array of items.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->except($keys);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Http\\Request::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Http\\Request::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Http\\Request::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Http\\Request::flushMacros();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validate($rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validate($rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param string $errorBag\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validateWithBag($errorBag, $rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validateWithBag($errorBag, $rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignature($absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignature($absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @static\n */\n public static function hasValidRelativeSignature()\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignature();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignatureWhileIgnoring($ignoreQuery, $absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @static\n */\n public static function hasValidRelativeSignatureWhileIgnoring($ignoreQuery = [])\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignatureWhileIgnoring($ignoreQuery);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\ResponseFactory\n */\n class Response {\n /**\n * Create a new response instance.\n *\n * @param mixed $content\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function make($content = '', $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->make($content, $status, $headers);\n }\n\n /**\n * Create a new \"no content\" response.\n *\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function noContent($status = 204, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->noContent($status, $headers);\n }\n\n /**\n * Create a new response for a given view.\n *\n * @param string|array $view\n * @param array $data\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function view($view, $data = [], $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->view($view, $data, $status, $headers);\n }\n\n /**\n * Create a new JSON response instance.\n *\n * @param mixed $data\n * @param int $status\n * @param array $headers\n * @param int $options\n * @return \\Illuminate\\Http\\JsonResponse\n * @static\n */\n public static function json($data = [], $status = 200, $headers = [], $options = 0)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->json($data, $status, $headers, $options);\n }\n\n /**\n * Create a new JSONP response instance.\n *\n * @param string $callback\n * @param mixed $data\n * @param int $status\n * @param array $headers\n * @param int $options\n * @return \\Illuminate\\Http\\JsonResponse\n * @static\n */\n public static function jsonp($callback, $data = [], $status = 200, $headers = [], $options = 0)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->jsonp($callback, $data, $status, $headers, $options);\n }\n\n /**\n * Create a new event stream response.\n *\n * @param \\Closure $callback\n * @param array $headers\n * @param \\Illuminate\\Http\\StreamedEvent|string|null $endStreamWith\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function eventStream($callback, $headers = [], $endStreamWith = '</stream>')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->eventStream($callback, $headers, $endStreamWith);\n }\n\n /**\n * Create a new streamed response instance.\n *\n * @param callable|null $callback\n * @param int $status\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function stream($callback, $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->stream($callback, $status, $headers);\n }\n\n /**\n * Create a new streamed JSON response instance.\n *\n * @param array $data\n * @param int $status\n * @param array $headers\n * @param int $encodingOptions\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedJsonResponse\n * @static\n */\n public static function streamJson($data, $status = 200, $headers = [], $encodingOptions = 15)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->streamJson($data, $status, $headers, $encodingOptions);\n }\n\n /**\n * Create a new streamed response instance as a file download.\n *\n * @param callable $callback\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @throws \\Illuminate\\Routing\\Exceptions\\StreamedResponseException\n * @static\n */\n public static function streamDownload($callback, $name = null, $headers = [], $disposition = 'attachment')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->streamDownload($callback, $name, $headers, $disposition);\n }\n\n /**\n * Create a new file download response.\n *\n * @param \\SplFileInfo|string $file\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n * @static\n */\n public static function download($file, $name = null, $headers = [], $disposition = 'attachment')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->download($file, $name, $headers, $disposition);\n }\n\n /**\n * Return the raw contents of a binary file.\n *\n * @param \\SplFileInfo|string $file\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n * @static\n */\n public static function file($file, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->file($file, $headers);\n }\n\n /**\n * Create a new redirect response to the given path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectTo($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectTo($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to a named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToRoute($route, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToRoute($route, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a controller action.\n *\n * @param array|string $action\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToAction($action, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToAction($action, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response, while putting the current URL in the session.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectGuest($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectGuest($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the previously intended location.\n *\n * @param string $default\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToIntended($default = '/', $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToIntended($default, $status, $headers, $secure);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\ResponseFactory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\ResponseFactory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\ResponseFactory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\ResponseFactory::flushMacros();\n }\n\n /**\n * @see \\Jiminny\\Providers\\ResponseMacroServiceProvider::boot()\n * @param mixed $data\n * @param mixed $status\n * @param array $headers\n * @param mixed $options\n * @static\n */\n public static function twiml($data = null, $status = 200, $headers = [], $options = 0)\n {\n return \\Illuminate\\Routing\\ResponseFactory::twiml($data, $status, $headers, $options);\n }\n\n }\n /**\n * @method static \\Illuminate\\Routing\\RouteRegistrar attribute(string $key, mixed $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereAlpha(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereAlphaNumeric(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereNumber(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereUlid(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereUuid(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereIn(array|string $parameters, array $values)\n * @method static \\Illuminate\\Routing\\RouteRegistrar as(string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar can(\\UnitEnum|string $ability, array|string $models = [])\n * @method static \\Illuminate\\Routing\\RouteRegistrar controller(string $controller)\n * @method static \\Illuminate\\Routing\\RouteRegistrar domain(\\BackedEnum|string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar middleware(array|string|null $middleware)\n * @method static \\Illuminate\\Routing\\RouteRegistrar missing(\\Closure $missing)\n * @method static \\Illuminate\\Routing\\RouteRegistrar name(\\BackedEnum|string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar namespace(string|null $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar prefix(string $prefix)\n * @method static \\Illuminate\\Routing\\RouteRegistrar scopeBindings()\n * @method static \\Illuminate\\Routing\\RouteRegistrar where(array $where)\n * @method static \\Illuminate\\Routing\\RouteRegistrar withoutMiddleware(array|string $middleware)\n * @method static \\Illuminate\\Routing\\RouteRegistrar withoutScopedBindings()\n * @see \\Illuminate\\Routing\\Router\n */\n class Route {\n /**\n * Register a new GET route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function get($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->get($uri, $action);\n }\n\n /**\n * Register a new POST route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function post($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->post($uri, $action);\n }\n\n /**\n * Register a new PUT route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function put($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->put($uri, $action);\n }\n\n /**\n * Register a new PATCH route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function patch($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->patch($uri, $action);\n }\n\n /**\n * Register a new DELETE route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function delete($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->delete($uri, $action);\n }\n\n /**\n * Register a new OPTIONS route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function options($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->options($uri, $action);\n }\n\n /**\n * Register a new route responding to all verbs.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function any($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->any($uri, $action);\n }\n\n /**\n * Register a new fallback route with the router.\n *\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function fallback($action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->fallback($action);\n }\n\n /**\n * Create a redirect from one URI to another.\n *\n * @param string $uri\n * @param string $destination\n * @param int $status\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function redirect($uri, $destination, $status = 302)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->redirect($uri, $destination, $status);\n }\n\n /**\n * Create a permanent redirect from one URI to another.\n *\n * @param string $uri\n * @param string $destination\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function permanentRedirect($uri, $destination)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->permanentRedirect($uri, $destination);\n }\n\n /**\n * Register a new route that returns a view.\n *\n * @param string $uri\n * @param string $view\n * @param array $data\n * @param int|array $status\n * @param array $headers\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function view($uri, $view, $data = [], $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->view($uri, $view, $data, $status, $headers);\n }\n\n /**\n * Register a new route with the given verbs.\n *\n * @param array|string $methods\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function match($methods, $uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->match($methods, $uri, $action);\n }\n\n /**\n * Register an array of resource controllers.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function resources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->resources($resources, $options);\n }\n\n /**\n * Register an array of resource controllers that can be soft deleted.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function softDeletableResources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->softDeletableResources($resources, $options);\n }\n\n /**\n * Route a resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingResourceRegistration\n * @static\n */\n public static function resource($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resource($name, $controller, $options);\n }\n\n /**\n * Register an array of API resource controllers.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function apiResources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->apiResources($resources, $options);\n }\n\n /**\n * Route an API resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingResourceRegistration\n * @static\n */\n public static function apiResource($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->apiResource($name, $controller, $options);\n }\n\n /**\n * Register an array of singleton resource controllers.\n *\n * @param array $singletons\n * @param array $options\n * @return void\n * @static\n */\n public static function singletons($singletons, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->singletons($singletons, $options);\n }\n\n /**\n * Route a singleton resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingSingletonResourceRegistration\n * @static\n */\n public static function singleton($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->singleton($name, $controller, $options);\n }\n\n /**\n * Register an array of API singleton resource controllers.\n *\n * @param array $singletons\n * @param array $options\n * @return void\n * @static\n */\n public static function apiSingletons($singletons, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->apiSingletons($singletons, $options);\n }\n\n /**\n * Route an API singleton resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingSingletonResourceRegistration\n * @static\n */\n public static function apiSingleton($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->apiSingleton($name, $controller, $options);\n }\n\n /**\n * Create a route group with shared attributes.\n *\n * @param array $attributes\n * @param \\Closure|array|string $routes\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function group($attributes, $routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->group($attributes, $routes);\n }\n\n /**\n * Merge the given array with the last group stack.\n *\n * @param array $new\n * @param bool $prependExistingPrefix\n * @return array\n * @static\n */\n public static function mergeWithLastGroup($new, $prependExistingPrefix = true)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->mergeWithLastGroup($new, $prependExistingPrefix);\n }\n\n /**\n * Get the prefix from the last group on the stack.\n *\n * @return string\n * @static\n */\n public static function getLastGroupPrefix()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getLastGroupPrefix();\n }\n\n /**\n * Add a route to the underlying route collection.\n *\n * @param array|string $methods\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function addRoute($methods, $uri, $action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->addRoute($methods, $uri, $action);\n }\n\n /**\n * Create a new Route object.\n *\n * @param array|string $methods\n * @param string $uri\n * @param mixed $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function newRoute($methods, $uri, $action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->newRoute($methods, $uri, $action);\n }\n\n /**\n * Return the response returned by the given route.\n *\n * @param string $name\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function respondWithRoute($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->respondWithRoute($name);\n }\n\n /**\n * Dispatch the request to the application.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function dispatch($request)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->dispatch($request);\n }\n\n /**\n * Dispatch the request to a route and return the response.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function dispatchToRoute($request)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->dispatchToRoute($request);\n }\n\n /**\n * Gather the middleware for the given route with resolved class names.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return array\n * @static\n */\n public static function gatherRouteMiddleware($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->gatherRouteMiddleware($route);\n }\n\n /**\n * Resolve a flat array of middleware classes from the provided array.\n *\n * @param array $middleware\n * @param array $excluded\n * @return array\n * @static\n */\n public static function resolveMiddleware($middleware, $excluded = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resolveMiddleware($middleware, $excluded);\n }\n\n /**\n * Create a response instance from the given value.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param mixed $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function prepareResponse($request, $response)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->prepareResponse($request, $response);\n }\n\n /**\n * Static version of prepareResponse.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param mixed $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function toResponse($request, $response)\n {\n return \\Illuminate\\Routing\\Router::toResponse($request, $response);\n }\n\n /**\n * Substitute the route bindings onto the route.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return \\Illuminate\\Routing\\Route\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<\\Illuminate\\Database\\Eloquent\\Model>\n * @throws \\Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException\n * @static\n */\n public static function substituteBindings($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->substituteBindings($route);\n }\n\n /**\n * Substitute the implicit route bindings for the given route.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return void\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<\\Illuminate\\Database\\Eloquent\\Model>\n * @throws \\Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException\n * @static\n */\n public static function substituteImplicitBindings($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->substituteImplicitBindings($route);\n }\n\n /**\n * Register a callback to run after implicit bindings are substituted.\n *\n * @param callable $callback\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function substituteImplicitBindingsUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->substituteImplicitBindingsUsing($callback);\n }\n\n /**\n * Register a route matched event listener.\n *\n * @param string|callable $callback\n * @return void\n * @static\n */\n public static function matched($callback)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->matched($callback);\n }\n\n /**\n * Get all of the defined middleware short-hand names.\n *\n * @return array\n * @static\n */\n public static function getMiddleware()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getMiddleware();\n }\n\n /**\n * Register a short-hand name for a middleware.\n *\n * @param string $name\n * @param string $class\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function aliasMiddleware($name, $class)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->aliasMiddleware($name, $class);\n }\n\n /**\n * Check if a middlewareGroup with the given name exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMiddlewareGroup($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->hasMiddlewareGroup($name);\n }\n\n /**\n * Get all of the defined middleware groups.\n *\n * @return array\n * @static\n */\n public static function getMiddlewareGroups()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getMiddlewareGroups();\n }\n\n /**\n * Register a group of middleware.\n *\n * @param string $name\n * @param array $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function middlewareGroup($name, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->middlewareGroup($name, $middleware);\n }\n\n /**\n * Add a middleware to the beginning of a middleware group.\n * \n * If the middleware is already in the group, it will not be added again.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function prependMiddlewareToGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->prependMiddlewareToGroup($group, $middleware);\n }\n\n /**\n * Add a middleware to the end of a middleware group.\n * \n * If the middleware is already in the group, it will not be added again.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function pushMiddlewareToGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->pushMiddlewareToGroup($group, $middleware);\n }\n\n /**\n * Remove the given middleware from the specified group.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function removeMiddlewareFromGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->removeMiddlewareFromGroup($group, $middleware);\n }\n\n /**\n * Flush the router's middleware groups.\n *\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function flushMiddlewareGroups()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->flushMiddlewareGroups();\n }\n\n /**\n * Add a new route parameter binder.\n *\n * @param string $key\n * @param string|callable $binder\n * @return void\n * @static\n */\n public static function bind($key, $binder)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->bind($key, $binder);\n }\n\n /**\n * Register a model binder for a wildcard.\n *\n * @param string $key\n * @param string $class\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function model($key, $class, $callback = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->model($key, $class, $callback);\n }\n\n /**\n * Get the binding callback for a given binding.\n *\n * @param string $key\n * @return \\Closure|null\n * @static\n */\n public static function getBindingCallback($key)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getBindingCallback($key);\n }\n\n /**\n * Get the global \"where\" patterns.\n *\n * @return array\n * @static\n */\n public static function getPatterns()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getPatterns();\n }\n\n /**\n * Set a global where pattern on all routes.\n *\n * @param string $key\n * @param string $pattern\n * @return void\n * @static\n */\n public static function pattern($key, $pattern)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->pattern($key, $pattern);\n }\n\n /**\n * Set a group of global where patterns on all routes.\n *\n * @param array $patterns\n * @return void\n * @static\n */\n public static function patterns($patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->patterns($patterns);\n }\n\n /**\n * Determine if the router currently has a group stack.\n *\n * @return bool\n * @static\n */\n public static function hasGroupStack()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->hasGroupStack();\n }\n\n /**\n * Get the current group stack for the router.\n *\n * @return array\n * @static\n */\n public static function getGroupStack()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getGroupStack();\n }\n\n /**\n * Get a route parameter for the current route.\n *\n * @param string $key\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function input($key, $default = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->input($key, $default);\n }\n\n /**\n * Get the request currently being dispatched.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function getCurrentRequest()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getCurrentRequest();\n }\n\n /**\n * Get the currently dispatched route instance.\n *\n * @return \\Illuminate\\Routing\\Route|null\n * @static\n */\n public static function getCurrentRoute()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getCurrentRoute();\n }\n\n /**\n * Get the currently dispatched route instance.\n *\n * @return \\Illuminate\\Routing\\Route|null\n * @static\n */\n public static function current()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->current();\n }\n\n /**\n * Check if a route with the given name exists.\n *\n * @param string|array $name\n * @return bool\n * @static\n */\n public static function has($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->has($name);\n }\n\n /**\n * Get the current route name.\n *\n * @return string|null\n * @static\n */\n public static function currentRouteName()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteName();\n }\n\n /**\n * Alias for the \"currentRouteNamed\" method.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function is(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->is(...$patterns);\n }\n\n /**\n * Determine if the current route matches a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function currentRouteNamed(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteNamed(...$patterns);\n }\n\n /**\n * Get the current route action.\n *\n * @return string|null\n * @static\n */\n public static function currentRouteAction()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteAction();\n }\n\n /**\n * Alias for the \"currentRouteUses\" method.\n *\n * @param array|string $patterns\n * @return bool\n * @static\n */\n public static function uses(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->uses(...$patterns);\n }\n\n /**\n * Determine if the current route action matches a given action.\n *\n * @param string $action\n * @return bool\n * @static\n */\n public static function currentRouteUses($action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteUses($action);\n }\n\n /**\n * Set the unmapped global resource parameters to singular.\n *\n * @param bool $singular\n * @return void\n * @static\n */\n public static function singularResourceParameters($singular = true)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->singularResourceParameters($singular);\n }\n\n /**\n * Set the global resource parameter mapping.\n *\n * @param array $parameters\n * @return void\n * @static\n */\n public static function resourceParameters($parameters = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->resourceParameters($parameters);\n }\n\n /**\n * Get or set the verbs used in the resource URIs.\n *\n * @param array $verbs\n * @return array|null\n * @static\n */\n public static function resourceVerbs($verbs = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resourceVerbs($verbs);\n }\n\n /**\n * Get the underlying route collection.\n *\n * @return \\Illuminate\\Routing\\RouteCollectionInterface\n * @static\n */\n public static function getRoutes()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getRoutes();\n }\n\n /**\n * Set the route collection instance.\n *\n * @param \\Illuminate\\Routing\\RouteCollection $routes\n * @return void\n * @static\n */\n public static function setRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->setRoutes($routes);\n }\n\n /**\n * Set the compiled route collection instance.\n *\n * @param array $routes\n * @return void\n * @static\n */\n public static function setCompiledRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->setCompiledRoutes($routes);\n }\n\n /**\n * Remove any duplicate middleware from the given array.\n *\n * @param array $middleware\n * @return array\n * @static\n */\n public static function uniqueMiddleware($middleware)\n {\n return \\Illuminate\\Routing\\Router::uniqueMiddleware($middleware);\n }\n\n /**\n * Set the container instance used by the router.\n *\n * @param \\Illuminate\\Container\\Container $container\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\Router::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\Router::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\Router::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\Router::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Call the given Closure with this instance then return the instance.\n *\n * @param (callable($this): mixed)|null $callback\n * @return ($callback is null ? \\Illuminate\\Support\\HigherOrderTapProxy : $this)\n * @static\n */\n public static function tap($callback = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->tap($callback);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::auth()\n * @param mixed $options\n * @static\n */\n public static function auth($options = [])\n {\n return \\Illuminate\\Routing\\Router::auth($options);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::resetPassword()\n * @static\n */\n public static function resetPassword()\n {\n return \\Illuminate\\Routing\\Router::resetPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::confirmPassword()\n * @static\n */\n public static function confirmPassword()\n {\n return \\Illuminate\\Routing\\Router::confirmPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::emailVerification()\n * @static\n */\n public static function emailVerification()\n {\n return \\Illuminate\\Routing\\Router::emailVerification();\n }\n\n }\n /**\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes withoutOverlapping(int $expiresAt = 1440)\n * @method static void mergeAttributes(\\Illuminate\\Console\\Scheduling\\Event $event)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes user(string $user)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes environments(mixed $environments)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes evenInMaintenanceMode()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes onOneServer()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes runInBackground()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes when(\\Closure|bool $callback)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes skip(\\Closure|bool $callback)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes name(string $description)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes description(string $description)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes cron(string $expression)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes between(string $startTime, string $endTime)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes unlessBetween(string $startTime, string $endTime)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everySecond()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFiveSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTenSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFifteenSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwentySeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThirtySeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyMinute()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThreeMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFourMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFiveMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTenMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFifteenMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThirtyMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes hourly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes hourlyAt(array|string|int|int[] $offset)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyOddHour(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThreeHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFourHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everySixHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes daily()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes at(string $time)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes dailyAt(string $time)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceDaily(int $first = 1, int $second = 13)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceDailyAt(int $first = 1, int $second = 13, int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekends()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes mondays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes tuesdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes wednesdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes thursdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes fridays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes saturdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes sundays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weeklyOn(mixed $dayOfWeek, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes monthly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes monthlyOn(int $dayOfMonth = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceMonthly(int $first = 1, int $second = 16, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes lastDayOfMonth(string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes quarterly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes quarterlyOn(int $dayOfQuarter = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes yearly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes yearlyOn(int $month = 1, int|string $dayOfMonth = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes days(mixed $days)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes timezone(\\UnitEnum|\\DateTimeZone|string $timezone)\n * @see \\Illuminate\\Console\\Scheduling\\Schedule\n */\n class Schedule {\n /**\n * Add a new callback event to the schedule.\n *\n * @param string|callable $callback\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\CallbackEvent\n * @static\n */\n public static function call($callback, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->call($callback, $parameters);\n }\n\n /**\n * Add a new Artisan command event to the schedule.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command|string $command\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\Event\n * @static\n */\n public static function command($command, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->command($command, $parameters);\n }\n\n /**\n * Add a new job callback event to the schedule.\n *\n * @param object|string $job\n * @param \\UnitEnum|string|null $queue\n * @param \\UnitEnum|string|null $connection\n * @return \\Illuminate\\Console\\Scheduling\\CallbackEvent\n * @static\n */\n public static function job($job, $queue = null, $connection = null)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->job($job, $queue, $connection);\n }\n\n /**\n * Add a new command event to the schedule.\n *\n * @param string $command\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\Event\n * @static\n */\n public static function exec($command, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->exec($command, $parameters);\n }\n\n /**\n * Create new schedule group.\n *\n * @param \\Illuminate\\Console\\Scheduling\\Event $event\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function group($events)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n $instance->group($events);\n }\n\n /**\n * Compile array input for a command.\n *\n * @param string|int $key\n * @param array $value\n * @return string\n * @static\n */\n public static function compileArrayInput($key, $value)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->compileArrayInput($key, $value);\n }\n\n /**\n * Determine if the server is allowed to run this event.\n *\n * @param \\Illuminate\\Console\\Scheduling\\Event $event\n * @param \\DateTimeInterface $time\n * @return bool\n * @static\n */\n public static function serverShouldRun($event, $time)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->serverShouldRun($event, $time);\n }\n\n /**\n * Get all of the events on the schedule that are due.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dueEvents($app)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->dueEvents($app);\n }\n\n /**\n * Get all of the events on the schedule.\n *\n * @return \\Illuminate\\Console\\Scheduling\\Event[]\n * @static\n */\n public static function events()\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->events();\n }\n\n /**\n * Specify the cache store that should be used to store mutexes.\n *\n * @param string $store\n * @return \\Illuminate\\Console\\Scheduling\\Schedule\n * @static\n */\n public static function useCache($store)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->useCache($store);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Console\\Scheduling\\Schedule::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Database\\Schema\\Builder\n */\n class Schema {\n /**\n * Drop all tables from the database.\n *\n * @return void\n * @static\n */\n public static function dropAllTables()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllTables();\n }\n\n /**\n * Drop all views from the database.\n *\n * @return void\n * @static\n */\n public static function dropAllViews()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllViews();\n }\n\n /**\n * Get the names of current schemas for the connection.\n *\n * @return string[]|null\n * @static\n */\n public static function getCurrentSchemaListing()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getCurrentSchemaListing();\n }\n\n /**\n * Set the default string length for migrations.\n *\n * @param int $length\n * @return void\n * @static\n */\n public static function defaultStringLength($length)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultStringLength($length);\n }\n\n /**\n * Set the default time precision for migrations.\n *\n * @static\n */\n public static function defaultTimePrecision($precision)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n return \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultTimePrecision($precision);\n }\n\n /**\n * Set the default morph key type for migrations.\n *\n * @param string $type\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function defaultMorphKeyType($type)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultMorphKeyType($type);\n }\n\n /**\n * Set the default morph key type for migrations to UUIDs.\n *\n * @return void\n * @static\n */\n public static function morphUsingUuids()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::morphUsingUuids();\n }\n\n /**\n * Set the default morph key type for migrations to ULIDs.\n *\n * @return void\n * @static\n */\n public static function morphUsingUlids()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::morphUsingUlids();\n }\n\n /**\n * Create a database in the schema.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function createDatabase($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->createDatabase($name);\n }\n\n /**\n * Drop a database from the schema if the database exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function dropDatabaseIfExists($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->dropDatabaseIfExists($name);\n }\n\n /**\n * Get the schemas that belong to the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, path: string|null, default: bool}>\n * @static\n */\n public static function getSchemas()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getSchemas();\n }\n\n /**\n * Determine if the given table exists.\n *\n * @param string $table\n * @return bool\n * @static\n */\n public static function hasTable($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasTable($table);\n }\n\n /**\n * Determine if the given view exists.\n *\n * @param string $view\n * @return bool\n * @static\n */\n public static function hasView($view)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasView($view);\n }\n\n /**\n * Get the tables that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string|null, schema_qualified_name: string, size: int|null, comment: string|null, collation: string|null, engine: string|null}>\n * @static\n */\n public static function getTables($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTables($schema);\n }\n\n /**\n * Get the names of the tables that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @param bool $schemaQualified\n * @return list<string>\n * @static\n */\n public static function getTableListing($schema = null, $schemaQualified = true)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTableListing($schema, $schemaQualified);\n }\n\n /**\n * Get the views that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string|null, schema_qualified_name: string, definition: string}>\n * @static\n */\n public static function getViews($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getViews($schema);\n }\n\n /**\n * Get the user-defined types that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string, type: string, type: string, category: string, implicit: bool}>\n * @static\n */\n public static function getTypes($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTypes($schema);\n }\n\n /**\n * Determine if the given table has a given column.\n *\n * @param string $table\n * @param string $column\n * @return bool\n * @static\n */\n public static function hasColumn($table, $column)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasColumn($table, $column);\n }\n\n /**\n * Determine if the given table has given columns.\n *\n * @param string $table\n * @param array<string> $columns\n * @return bool\n * @static\n */\n public static function hasColumns($table, $columns)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasColumns($table, $columns);\n }\n\n /**\n * Execute a table builder callback if the given table has a given column.\n *\n * @param string $table\n * @param string $column\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function whenTableHasColumn($table, $column, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->whenTableHasColumn($table, $column, $callback);\n }\n\n /**\n * Execute a table builder callback if the given table doesn't have a given column.\n *\n * @param string $table\n * @param string $column\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function whenTableDoesntHaveColumn($table, $column, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->whenTableDoesntHaveColumn($table, $column, $callback);\n }\n\n /**\n * Get the data type for the given column name.\n *\n * @param string $table\n * @param string $column\n * @param bool $fullDefinition\n * @return string\n * @static\n */\n public static function getColumnType($table, $column, $fullDefinition = false)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumnType($table, $column, $fullDefinition);\n }\n\n /**\n * Get the column listing for a given table.\n *\n * @param string $table\n * @return list<string>\n * @static\n */\n public static function getColumnListing($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumnListing($table);\n }\n\n /**\n * Get the columns for a given table.\n *\n * @param string $table\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, type: string, type_name: string, nullable: bool, default: mixed, auto_increment: bool, comment: string|null, generation: array{type: string, expression: string|null}|null}>\n * @static\n */\n public static function getColumns($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumns($table);\n }\n\n /**\n * Get the indexes for a given table.\n *\n * @param string $table\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, columns: list<string>, type: string, unique: bool, primary: bool}>\n * @static\n */\n public static function getIndexes($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getIndexes($table);\n }\n\n /**\n * Get the names of the indexes for a given table.\n *\n * @param string $table\n * @return list<string>\n * @static\n */\n public static function getIndexListing($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getIndexListing($table);\n }\n\n /**\n * Determine if the given table has a given index.\n *\n * @param string $table\n * @param string|array $index\n * @param string|null $type\n * @return bool\n * @static\n */\n public static function hasIndex($table, $index, $type = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasIndex($table, $index, $type);\n }\n\n /**\n * Get the foreign keys for a given table.\n *\n * @param string $table\n * @return array\n * @static\n */\n public static function getForeignKeys($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getForeignKeys($table);\n }\n\n /**\n * Modify a table on the schema.\n *\n * @param string $table\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function table($table, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->table($table, $callback);\n }\n\n /**\n * Create a new table on the schema.\n *\n * @param string $table\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function create($table, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->create($table, $callback);\n }\n\n /**\n * Drop a table from the schema.\n *\n * @param string $table\n * @return void\n * @static\n */\n public static function drop($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->drop($table);\n }\n\n /**\n * Drop a table from the schema if it exists.\n *\n * @param string $table\n * @return void\n * @static\n */\n public static function dropIfExists($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropIfExists($table);\n }\n\n /**\n * Drop columns from a table schema.\n *\n * @param string $table\n * @param string|array<string> $columns\n * @return void\n * @static\n */\n public static function dropColumns($table, $columns)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropColumns($table, $columns);\n }\n\n /**\n * Drop all types from the database.\n *\n * @return void\n * @throws \\LogicException\n * @static\n */\n public static function dropAllTypes()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllTypes();\n }\n\n /**\n * Rename a table on the schema.\n *\n * @param string $from\n * @param string $to\n * @return void\n * @static\n */\n public static function rename($from, $to)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->rename($from, $to);\n }\n\n /**\n * Enable foreign key constraints.\n *\n * @return bool\n * @static\n */\n public static function enableForeignKeyConstraints()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->enableForeignKeyConstraints();\n }\n\n /**\n * Disable foreign key constraints.\n *\n * @return bool\n * @static\n */\n public static function disableForeignKeyConstraints()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->disableForeignKeyConstraints();\n }\n\n /**\n * Disable foreign key constraints during the execution of a callback.\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutForeignKeyConstraints($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->withoutForeignKeyConstraints($callback);\n }\n\n /**\n * Get the default schema name for the connection.\n *\n * @return string|null\n * @static\n */\n public static function getCurrentSchemaName()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getCurrentSchemaName();\n }\n\n /**\n * Parse the given database object reference and extract the schema and table.\n *\n * @param string $reference\n * @param string|bool|null $withDefaultSchema\n * @return array\n * @static\n */\n public static function parseSchemaAndTable($reference, $withDefaultSchema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->parseSchemaAndTable($reference, $withDefaultSchema);\n }\n\n /**\n * Get the database connection instance.\n *\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function getConnection()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getConnection();\n }\n\n /**\n * Set the Schema Blueprint resolver callback.\n *\n * @param \\Closure(\\Illuminate\\Database\\Connection, string, \\Closure|null): \\Illuminate\\Database\\Schema\\Blueprint $resolver\n * @return void\n * @static\n */\n public static function blueprintResolver($resolver)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->blueprintResolver($resolver);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n return \\Illuminate\\Database\\Schema\\MariaDbBuilder::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Session\\SessionManager\n */\n class Session {\n /**\n * Determine if requests for the same session should wait for each to finish before executing.\n *\n * @return bool\n * @static\n */\n public static function shouldBlock()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->shouldBlock();\n }\n\n /**\n * Get the name of the cache store / driver that should be used to acquire session locks.\n *\n * @return string|null\n * @static\n */\n public static function blockDriver()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->blockDriver();\n }\n\n /**\n * Get the maximum number of seconds the session lock should be held for.\n *\n * @return int\n * @static\n */\n public static function defaultRouteBlockLockSeconds()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->defaultRouteBlockLockSeconds();\n }\n\n /**\n * Get the maximum number of seconds to wait while attempting to acquire a route block session lock.\n *\n * @return int\n * @static\n */\n public static function defaultRouteBlockWaitSeconds()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->defaultRouteBlockWaitSeconds();\n }\n\n /**\n * Get the session configuration.\n *\n * @return array\n * @static\n */\n public static function getSessionConfig()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getSessionConfig();\n }\n\n /**\n * Get the default session driver name.\n *\n * @return string|null\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default session driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->forgetDrivers();\n }\n\n /**\n * Start the session, reading the data from a handler.\n *\n * @return bool\n * @static\n */\n public static function start()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->start();\n }\n\n /**\n * Save the session data to storage.\n *\n * @return void\n * @static\n */\n public static function save()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->save();\n }\n\n /**\n * Age the flash data for the session.\n *\n * @return void\n * @static\n */\n public static function ageFlashData()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->ageFlashData();\n }\n\n /**\n * Get all of the session data.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->all();\n }\n\n /**\n * Get a subset of the session data.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->only($keys);\n }\n\n /**\n * Get all the session data except for a specified array of items.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->except($keys);\n }\n\n /**\n * Checks if a key exists.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function exists($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->exists($key);\n }\n\n /**\n * Determine if the given key is missing from the session data.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->missing($key);\n }\n\n /**\n * Determine if a key is present and not null.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if any of the given keys are present and not null.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function hasAny($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasAny($key);\n }\n\n /**\n * Get an item from the session.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get the value of a given key and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Determine if the session contains old input.\n *\n * @param string|null $key\n * @return bool\n * @static\n */\n public static function hasOldInput($key = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasOldInput($key);\n }\n\n /**\n * Get the requested item from the flashed input array.\n *\n * @param string|null $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getOldInput($key = null, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getOldInput($key, $default);\n }\n\n /**\n * Replace the given session attributes entirely.\n *\n * @param array $attributes\n * @return void\n * @static\n */\n public static function replace($attributes)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->replace($attributes);\n }\n\n /**\n * Put a key / value pair or array of key / value pairs in the session.\n *\n * @param string|array $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function put($key, $value = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->put($key, $value);\n }\n\n /**\n * Get an item from the session, or store the default value.\n *\n * @param string $key\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function remember($key, $callback)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->remember($key, $callback);\n }\n\n /**\n * Push a value onto a session array.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function push($key, $value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->push($key, $value);\n }\n\n /**\n * Increment the value of an item in the session.\n *\n * @param string $key\n * @param int $amount\n * @return mixed\n * @static\n */\n public static function increment($key, $amount = 1)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->increment($key, $amount);\n }\n\n /**\n * Decrement the value of an item in the session.\n *\n * @param string $key\n * @param int $amount\n * @return int\n * @static\n */\n public static function decrement($key, $amount = 1)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->decrement($key, $amount);\n }\n\n /**\n * Flash a key / value pair to the session.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function flash($key, $value = true)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flash($key, $value);\n }\n\n /**\n * Flash a key / value pair to the session for immediate use.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function now($key, $value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->now($key, $value);\n }\n\n /**\n * Reflash all of the session flash data.\n *\n * @return void\n * @static\n */\n public static function reflash()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->reflash();\n }\n\n /**\n * Reflash a subset of the current flash data.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function keep($keys = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->keep($keys);\n }\n\n /**\n * Flash an input array to the session.\n *\n * @param array $value\n * @return void\n * @static\n */\n public static function flashInput($value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flashInput($value);\n }\n\n /**\n * Get the session cache instance.\n *\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function cache()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->cache();\n }\n\n /**\n * Remove an item from the session, returning its value.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function remove($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->remove($key);\n }\n\n /**\n * Remove one or many items from the session.\n *\n * @param string|array $keys\n * @return void\n * @static\n */\n public static function forget($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->forget($keys);\n }\n\n /**\n * Remove all of the items from the session.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flush();\n }\n\n /**\n * Flush the session data and regenerate the ID.\n *\n * @return bool\n * @static\n */\n public static function invalidate()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->invalidate();\n }\n\n /**\n * Generate a new session identifier.\n *\n * @param bool $destroy\n * @return bool\n * @static\n */\n public static function regenerate($destroy = false)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->regenerate($destroy);\n }\n\n /**\n * Generate a new session ID for the session.\n *\n * @param bool $destroy\n * @return bool\n * @static\n */\n public static function migrate($destroy = false)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->migrate($destroy);\n }\n\n /**\n * Determine if the session has been started.\n *\n * @return bool\n * @static\n */\n public static function isStarted()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->isStarted();\n }\n\n /**\n * Get the name of the session.\n *\n * @return string\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getName();\n }\n\n /**\n * Set the name of the session.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setName($name)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setName($name);\n }\n\n /**\n * Get the current session ID.\n *\n * @return string\n * @static\n */\n public static function id()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->id();\n }\n\n /**\n * Get the current session ID.\n *\n * @return string\n * @static\n */\n public static function getId()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getId();\n }\n\n /**\n * Set the session ID.\n *\n * @param string|null $id\n * @return void\n * @static\n */\n public static function setId($id)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setId($id);\n }\n\n /**\n * Determine if this is a valid session ID.\n *\n * @param string|null $id\n * @return bool\n * @static\n */\n public static function isValidId($id)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->isValidId($id);\n }\n\n /**\n * Set the existence of the session on the handler if applicable.\n *\n * @param bool $value\n * @return void\n * @static\n */\n public static function setExists($value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setExists($value);\n }\n\n /**\n * Get the CSRF token value.\n *\n * @return string\n * @static\n */\n public static function token()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->token();\n }\n\n /**\n * Regenerate the CSRF token value.\n *\n * @return void\n * @static\n */\n public static function regenerateToken()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->regenerateToken();\n }\n\n /**\n * Determine if the previous URI is available.\n *\n * @return bool\n * @static\n */\n public static function hasPreviousUri()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasPreviousUri();\n }\n\n /**\n * Get the previous URL from the session as a URI instance.\n *\n * @return \\Illuminate\\Support\\Uri\n * @throws \\RuntimeException\n * @static\n */\n public static function previousUri()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->previousUri();\n }\n\n /**\n * Get the previous URL from the session.\n *\n * @return string|null\n * @static\n */\n public static function previousUrl()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->previousUrl();\n }\n\n /**\n * Set the \"previous\" URL in the session.\n *\n * @param string $url\n * @return void\n * @static\n */\n public static function setPreviousUrl($url)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setPreviousUrl($url);\n }\n\n /**\n * Specify that the user has confirmed their password.\n *\n * @return void\n * @static\n */\n public static function passwordConfirmed()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->passwordConfirmed();\n }\n\n /**\n * Get the underlying session handler implementation.\n *\n * @return \\SessionHandlerInterface\n * @static\n */\n public static function getHandler()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getHandler();\n }\n\n /**\n * Set the underlying session handler implementation.\n *\n * @param \\SessionHandlerInterface $handler\n * @return \\SessionHandlerInterface\n * @static\n */\n public static function setHandler($handler)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->setHandler($handler);\n }\n\n /**\n * Determine if the session handler needs a request.\n *\n * @return bool\n * @static\n */\n public static function handlerNeedsRequest()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->handlerNeedsRequest();\n }\n\n /**\n * Set the request on the handler instance.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function setRequestOnHandler($request)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setRequestOnHandler($request);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Session\\Store::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Session\\Store::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Session\\Store::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Session\\Store::flushMacros();\n }\n\n }\n /**\n * @method static bool has(string $location)\n * @method static string read(string $location)\n * @method static \\League\\Flysystem\\DirectoryListing listContents(string $location, bool $deep = false)\n * @method static int fileSize(string $path)\n * @method static string visibility(string $path)\n * @method static void write(string $location, string $contents, array $config = [])\n * @method static void createDirectory(string $location, array $config = [])\n * @see \\Illuminate\\Filesystem\\FilesystemManager\n */\n class Storage {\n /**\n * Get a filesystem instance.\n *\n * @param string|null $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function drive($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->drive($name);\n }\n\n /**\n * Get a filesystem instance.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function disk($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->disk($name);\n }\n\n /**\n * Get a default cloud filesystem instance.\n *\n * @return \\Illuminate\\Contracts\\Filesystem\\Cloud\n * @static\n */\n public static function cloud()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->cloud();\n }\n\n /**\n * Build an on-demand disk.\n *\n * @param string|array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create an instance of the local driver.\n *\n * @param array $config\n * @param string $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createLocalDriver($config, $name = 'local')\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createLocalDriver($config, $name);\n }\n\n /**\n * Create an instance of the ftp driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createFtpDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createFtpDriver($config);\n }\n\n /**\n * Create an instance of the sftp driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createSftpDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createSftpDriver($config);\n }\n\n /**\n * Create an instance of the Amazon S3 driver.\n *\n * @param array $config\n * @return \\Illuminate\\Contracts\\Filesystem\\Cloud\n * @static\n */\n public static function createS3Driver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createS3Driver($config);\n }\n\n /**\n * Create a scoped driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createScopedDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createScopedDriver($config);\n }\n\n /**\n * Set the given disk instance.\n *\n * @param string $name\n * @param mixed $disk\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function set($name, $disk)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->set($name, $disk);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Get the default cloud driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultCloudDriver()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->getDefaultCloudDriver();\n }\n\n /**\n * Unset the given disk instances.\n *\n * @param array|string $disk\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function forgetDisk($disk)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->forgetDisk($disk);\n }\n\n /**\n * Disconnect the given disk and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Determine if temporary URLs can be generated.\n *\n * @return bool\n * @static\n */\n public static function providesTemporaryUrls()\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->providesTemporaryUrls();\n }\n\n /**\n * Get a temporary URL for the file at the given path.\n *\n * @param string $path\n * @param \\DateTimeInterface $expiration\n * @param array $options\n * @return string\n * @static\n */\n public static function temporaryUrl($path, $expiration, $options = [])\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->temporaryUrl($path, $expiration, $options);\n }\n\n /**\n * Specify the name of the disk the adapter is managing.\n *\n * @param string $disk\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function diskName($disk)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->diskName($disk);\n }\n\n /**\n * Indicate that signed URLs should serve the corresponding files.\n *\n * @param bool $serve\n * @param \\Closure|null $urlGeneratorResolver\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function shouldServeSignedUrls($serve = true, $urlGeneratorResolver = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->shouldServeSignedUrls($serve, $urlGeneratorResolver);\n }\n\n /**\n * Assert that the given file or directory exists.\n *\n * @param string|array $path\n * @param string|null $content\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertExists($path, $content = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertExists($path, $content);\n }\n\n /**\n * Assert that the number of files in path equals the expected count.\n *\n * @param string $path\n * @param int $count\n * @param bool $recursive\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertCount($path, $count, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertCount($path, $count, $recursive);\n }\n\n /**\n * Assert that the given file or directory does not exist.\n *\n * @param string|array $path\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertMissing($path);\n }\n\n /**\n * Assert that the given directory is empty.\n *\n * @param string $path\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertDirectoryEmpty($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertDirectoryEmpty($path);\n }\n\n /**\n * Determine if a file or directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function exists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->exists($path);\n }\n\n /**\n * Determine if a file or directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function missing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->missing($path);\n }\n\n /**\n * Determine if a file exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function fileExists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->fileExists($path);\n }\n\n /**\n * Determine if a file is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function fileMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->fileMissing($path);\n }\n\n /**\n * Determine if a directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function directoryExists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directoryExists($path);\n }\n\n /**\n * Determine if a directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function directoryMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directoryMissing($path);\n }\n\n /**\n * Get the full path to the file that exists at the given relative path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function path($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->path($path);\n }\n\n /**\n * Get the contents of a file.\n *\n * @param string $path\n * @return string|null\n * @static\n */\n public static function get($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->get($path);\n }\n\n /**\n * Get the contents of a file as decoded JSON.\n *\n * @param string $path\n * @param int $flags\n * @return array|null\n * @static\n */\n public static function json($path, $flags = 0)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->json($path, $flags);\n }\n\n /**\n * Create a streamed response for a given file.\n *\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function response($path, $name = null, $headers = [], $disposition = 'inline')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->response($path, $name, $headers, $disposition);\n }\n\n /**\n * Create a streamed download response for a given file.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function serve($request, $path, $name = null, $headers = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->serve($request, $path, $name, $headers);\n }\n\n /**\n * Create a streamed download response for a given file.\n *\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function download($path, $name = null, $headers = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->download($path, $name, $headers);\n }\n\n /**\n * Write the contents of a file.\n *\n * @param string $path\n * @param \\Psr\\Http\\Message\\StreamInterface|\\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|resource $contents\n * @param mixed $options\n * @return string|bool\n * @static\n */\n public static function put($path, $contents, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->put($path, $contents, $options);\n }\n\n /**\n * Store the uploaded file on the disk.\n *\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string $path\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|array|null $file\n * @param mixed $options\n * @return string|false\n * @static\n */\n public static function putFile($path, $file = null, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->putFile($path, $file, $options);\n }\n\n /**\n * Store the uploaded file on the disk with a given name.\n *\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string $path\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|array|null $file\n * @param string|array|null $name\n * @param mixed $options\n * @return string|false\n * @static\n */\n public static function putFileAs($path, $file, $name = null, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->putFileAs($path, $file, $name, $options);\n }\n\n /**\n * Get the visibility for the given path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function getVisibility($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getVisibility($path);\n }\n\n /**\n * Set the visibility for the given path.\n *\n * @param string $path\n * @param string $visibility\n * @return bool\n * @static\n */\n public static function setVisibility($path, $visibility)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->setVisibility($path, $visibility);\n }\n\n /**\n * Prepend to a file.\n *\n * @param string $path\n * @param string $data\n * @param string $separator\n * @return bool\n * @static\n */\n public static function prepend($path, $data, $separator = '\n')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->prepend($path, $data, $separator);\n }\n\n /**\n * Append to a file.\n *\n * @param string $path\n * @param string $data\n * @param string $separator\n * @return bool\n * @static\n */\n public static function append($path, $data, $separator = '\n')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->append($path, $data, $separator);\n }\n\n /**\n * Delete the file at a given path.\n *\n * @param string|array $paths\n * @return bool\n * @static\n */\n public static function delete($paths)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->delete($paths);\n }\n\n /**\n * Copy a file to a new location.\n *\n * @param string $from\n * @param string $to\n * @return bool\n * @static\n */\n public static function copy($from, $to)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->copy($from, $to);\n }\n\n /**\n * Move a file to a new location.\n *\n * @param string $from\n * @param string $to\n * @return bool\n * @static\n */\n public static function move($from, $to)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->move($from, $to);\n }\n\n /**\n * Get the file size of a given file.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function size($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->size($path);\n }\n\n /**\n * Get the checksum for a file.\n *\n * @return string|false\n * @throws UnableToProvideChecksum\n * @static\n */\n public static function checksum($path, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->checksum($path, $options);\n }\n\n /**\n * Get the mime-type of a given file.\n *\n * @param string $path\n * @return string|false\n * @static\n */\n public static function mimeType($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->mimeType($path);\n }\n\n /**\n * Get the file's last modification time.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function lastModified($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->lastModified($path);\n }\n\n /**\n * Get a resource to read the file.\n *\n * @param string $path\n * @return resource|null The path resource or null on failure.\n * @static\n */\n public static function readStream($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->readStream($path);\n }\n\n /**\n * Write a new file using a stream.\n *\n * @param string $path\n * @param resource $resource\n * @param array $options\n * @return bool\n * @static\n */\n public static function writeStream($path, $resource, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->writeStream($path, $resource, $options);\n }\n\n /**\n * Get the URL for the file at the given path.\n *\n * @param string $path\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function url($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->url($path);\n }\n\n /**\n * Get a temporary upload URL for the file at the given path.\n *\n * @param string $path\n * @param \\DateTimeInterface $expiration\n * @param array $options\n * @return array\n * @throws \\RuntimeException\n * @static\n */\n public static function temporaryUploadUrl($path, $expiration, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->temporaryUploadUrl($path, $expiration, $options);\n }\n\n /**\n * Get an array of all files in a directory.\n *\n * @param string|null $directory\n * @param bool $recursive\n * @return array\n * @static\n */\n public static function files($directory = null, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->files($directory, $recursive);\n }\n\n /**\n * Get all of the files from the given directory (recursive).\n *\n * @param string|null $directory\n * @return array\n * @static\n */\n public static function allFiles($directory = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->allFiles($directory);\n }\n\n /**\n * Get all of the directories within a given directory.\n *\n * @param string|null $directory\n * @param bool $recursive\n * @return array\n * @static\n */\n public static function directories($directory = null, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directories($directory, $recursive);\n }\n\n /**\n * Get all the directories within a given directory (recursive).\n *\n * @param string|null $directory\n * @return array\n * @static\n */\n public static function allDirectories($directory = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->allDirectories($directory);\n }\n\n /**\n * Create a directory.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function makeDirectory($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->makeDirectory($path);\n }\n\n /**\n * Recursively delete a directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function deleteDirectory($directory)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->deleteDirectory($directory);\n }\n\n /**\n * Get the Flysystem driver.\n *\n * @return \\League\\Flysystem\\FilesystemOperator\n * @static\n */\n public static function getDriver()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getDriver();\n }\n\n /**\n * Get the Flysystem adapter.\n *\n * @return \\League\\Flysystem\\FilesystemAdapter\n * @static\n */\n public static function getAdapter()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getAdapter();\n }\n\n /**\n * Get the configuration values.\n *\n * @return array\n * @static\n */\n public static function getConfig()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getConfig();\n }\n\n /**\n * Define a custom callback that generates file download responses.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function serveUsing($callback)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n $instance->serveUsing($callback);\n }\n\n /**\n * Define a custom temporary URL builder callback.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function buildTemporaryUrlsUsing($callback)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n $instance->buildTemporaryUrlsUsing($callback);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n return \\Illuminate\\Filesystem\\LocalFilesystemAdapter::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\UrlGenerator\n */\n class URL {\n /**\n * Get the full URL for the current request.\n *\n * @return string\n * @static\n */\n public static function full()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->full();\n }\n\n /**\n * Get the current URL for the request.\n *\n * @return string\n * @static\n */\n public static function current()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->current();\n }\n\n /**\n * Get the URL for the previous request.\n *\n * @param mixed $fallback\n * @return string\n * @static\n */\n public static function previous($fallback = false)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->previous($fallback);\n }\n\n /**\n * Get the previous path info for the request.\n *\n * @param mixed $fallback\n * @return string\n * @static\n */\n public static function previousPath($fallback = false)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->previousPath($fallback);\n }\n\n /**\n * Generate an absolute URL to the given path.\n *\n * @param string $path\n * @param mixed $extra\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function to($path, $extra = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->to($path, $extra, $secure);\n }\n\n /**\n * Generate an absolute URL with the given query parameters.\n *\n * @param string $path\n * @param array $query\n * @param mixed $extra\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function query($path, $query = [], $extra = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->query($path, $query, $extra, $secure);\n }\n\n /**\n * Generate a secure, absolute URL to the given path.\n *\n * @param string $path\n * @param array $parameters\n * @return string\n * @static\n */\n public static function secure($path, $parameters = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->secure($path, $parameters);\n }\n\n /**\n * Generate the URL to an application asset.\n *\n * @param string $path\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function asset($path, $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->asset($path, $secure);\n }\n\n /**\n * Generate the URL to a secure asset.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function secureAsset($path)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->secureAsset($path);\n }\n\n /**\n * Generate the URL to an asset from a custom root domain such as CDN, etc.\n *\n * @param string $root\n * @param string $path\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function assetFrom($root, $path, $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->assetFrom($root, $path, $secure);\n }\n\n /**\n * Get the default scheme for a raw URL.\n *\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function formatScheme($secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatScheme($secure);\n }\n\n /**\n * Create a signed route URL for a named route.\n *\n * @param \\BackedEnum|string $name\n * @param mixed $parameters\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param bool $absolute\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function signedRoute($name, $parameters = [], $expiration = null, $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->signedRoute($name, $parameters, $expiration, $absolute);\n }\n\n /**\n * Create a temporary signed route URL for a named route.\n *\n * @param \\BackedEnum|string $name\n * @param \\DateTimeInterface|\\DateInterval|int $expiration\n * @param array $parameters\n * @param bool $absolute\n * @return string\n * @static\n */\n public static function temporarySignedRoute($name, $expiration, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->temporarySignedRoute($name, $expiration, $parameters, $absolute);\n }\n\n /**\n * Determine if the given request has a valid signature.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param bool $absolute\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasValidSignature($request, $absolute = true, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasValidSignature($request, $absolute, $ignoreQuery);\n }\n\n /**\n * Determine if the given request has a valid signature for a relative URL.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasValidRelativeSignature($request, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasValidRelativeSignature($request, $ignoreQuery);\n }\n\n /**\n * Determine if the signature from the given request matches the URL.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param bool $absolute\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasCorrectSignature($request, $absolute = true, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasCorrectSignature($request, $absolute, $ignoreQuery);\n }\n\n /**\n * Determine if the expires timestamp from the given request is not from the past.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return bool\n * @static\n */\n public static function signatureHasNotExpired($request)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->signatureHasNotExpired($request);\n }\n\n /**\n * Get the URL to a named route.\n *\n * @param \\BackedEnum|string $name\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\Symfony\\Component\\Routing\\Exception\\RouteNotFoundException|\\InvalidArgumentException\n * @static\n */\n public static function route($name, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->route($name, $parameters, $absolute);\n }\n\n /**\n * Get the URL for a given route instance.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\Illuminate\\Routing\\Exceptions\\UrlGenerationException\n * @static\n */\n public static function toRoute($route, $parameters, $absolute)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->toRoute($route, $parameters, $absolute);\n }\n\n /**\n * Get the URL to a controller action.\n *\n * @param string|array $action\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function action($action, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->action($action, $parameters, $absolute);\n }\n\n /**\n * Format the array of URL parameters.\n *\n * @param mixed $parameters\n * @return array\n * @static\n */\n public static function formatParameters($parameters)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatParameters($parameters);\n }\n\n /**\n * Get the base URL for the request.\n *\n * @param string $scheme\n * @param string|null $root\n * @return string\n * @static\n */\n public static function formatRoot($scheme, $root = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatRoot($scheme, $root);\n }\n\n /**\n * Format the given URL segments into a single URL.\n *\n * @param string $root\n * @param string $path\n * @param \\Illuminate\\Routing\\Route|null $route\n * @return string\n * @static\n */\n public static function format($root, $path, $route = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->format($root, $path, $route);\n }\n\n /**\n * Determine if the given path is a valid URL.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isValidUrl($path)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->isValidUrl($path);\n }\n\n /**\n * Set the default named parameters used by the URL generator.\n *\n * @param array $defaults\n * @return void\n * @static\n */\n public static function defaults($defaults)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->defaults($defaults);\n }\n\n /**\n * Get the default named parameters used by the URL generator.\n *\n * @return array\n * @static\n */\n public static function getDefaultParameters()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getDefaultParameters();\n }\n\n /**\n * Force the scheme for URLs.\n *\n * @param string|null $scheme\n * @return void\n * @static\n */\n public static function forceScheme($scheme)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceScheme($scheme);\n }\n\n /**\n * Force the use of the HTTPS scheme for all generated URLs.\n *\n * @param bool $force\n * @return void\n * @static\n */\n public static function forceHttps($force = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceHttps($force);\n }\n\n /**\n * Set the URL origin for all generated URLs.\n *\n * @param string|null $root\n * @return void\n * @static\n */\n public static function useOrigin($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->useOrigin($root);\n }\n\n /**\n * Set the forced root URL.\n *\n * @param string|null $root\n * @return void\n * @deprecated Use useOrigin\n * @static\n */\n public static function forceRootUrl($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceRootUrl($root);\n }\n\n /**\n * Set the URL origin for all generated asset URLs.\n *\n * @param string|null $root\n * @return void\n * @static\n */\n public static function useAssetOrigin($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->useAssetOrigin($root);\n }\n\n /**\n * Set a callback to be used to format the host of generated URLs.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function formatHostUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatHostUsing($callback);\n }\n\n /**\n * Set a callback to be used to format the path of generated URLs.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function formatPathUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatPathUsing($callback);\n }\n\n /**\n * Get the path formatter being used by the URL generator.\n *\n * @return \\Closure\n * @static\n */\n public static function pathFormatter()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->pathFormatter();\n }\n\n /**\n * Get the request instance.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function getRequest()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getRequest();\n }\n\n /**\n * Set the current request instance.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function setRequest($request)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->setRequest($request);\n }\n\n /**\n * Set the route collection.\n *\n * @param \\Illuminate\\Routing\\RouteCollectionInterface $routes\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setRoutes($routes);\n }\n\n /**\n * Set the session resolver for the generator.\n *\n * @param callable $sessionResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setSessionResolver($sessionResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setSessionResolver($sessionResolver);\n }\n\n /**\n * Set the encryption key resolver.\n *\n * @param callable $keyResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setKeyResolver($keyResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setKeyResolver($keyResolver);\n }\n\n /**\n * Clone a new instance of the URL generator with a different encryption key resolver.\n *\n * @param callable $keyResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function withKeyResolver($keyResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->withKeyResolver($keyResolver);\n }\n\n /**\n * Set the callback that should be used to attempt to resolve missing named routes.\n *\n * @param callable $missingNamedRouteResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function resolveMissingNamedRoutesUsing($missingNamedRouteResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->resolveMissingNamedRoutesUsing($missingNamedRouteResolver);\n }\n\n /**\n * Get the root controller namespace.\n *\n * @return string\n * @static\n */\n public static function getRootControllerNamespace()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getRootControllerNamespace();\n }\n\n /**\n * Set the root controller namespace.\n *\n * @param string $rootNamespace\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setRootControllerNamespace($rootNamespace)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setRootControllerNamespace($rootNamespace);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\UrlGenerator::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\UrlGenerator::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\UrlGenerator::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\UrlGenerator::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Validation\\Factory\n */\n class Validator {\n /**\n * Create a new Validator instance.\n *\n * @param array $data\n * @param array $rules\n * @param array $messages\n * @param array $attributes\n * @return \\Illuminate\\Validation\\Validator\n * @static\n */\n public static function make($data, $rules, $messages = [], $attributes = [])\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->make($data, $rules, $messages, $attributes);\n }\n\n /**\n * Validate the given data against the provided rules.\n *\n * @param array $data\n * @param array $rules\n * @param array $messages\n * @param array $attributes\n * @return array\n * @throws \\Illuminate\\Validation\\ValidationException\n * @static\n */\n public static function validate($data, $rules, $messages = [], $attributes = [])\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->validate($data, $rules, $messages, $attributes);\n }\n\n /**\n * Register a custom validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extend($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extend($rule, $extension, $message);\n }\n\n /**\n * Register a custom implicit validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extendImplicit($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extendImplicit($rule, $extension, $message);\n }\n\n /**\n * Register a custom dependent validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extendDependent($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extendDependent($rule, $extension, $message);\n }\n\n /**\n * Register a custom validator message replacer.\n *\n * @param string $rule\n * @param \\Closure|string $replacer\n * @return void\n * @static\n */\n public static function replacer($rule, $replacer)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->replacer($rule, $replacer);\n }\n\n /**\n * Indicate that unvalidated array keys should be included in validated data when the parent array is validated.\n *\n * @return void\n * @static\n */\n public static function includeUnvalidatedArrayKeys()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->includeUnvalidatedArrayKeys();\n }\n\n /**\n * Indicate that unvalidated array keys should be excluded from the validated data, even if the parent array was validated.\n *\n * @return void\n * @static\n */\n public static function excludeUnvalidatedArrayKeys()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->excludeUnvalidatedArrayKeys();\n }\n\n /**\n * Set the Validator instance resolver.\n *\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function resolver($resolver)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->resolver($resolver);\n }\n\n /**\n * Get the Translator implementation.\n *\n * @return \\Illuminate\\Contracts\\Translation\\Translator\n * @static\n */\n public static function getTranslator()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getTranslator();\n }\n\n /**\n * Get the Presence Verifier implementation.\n *\n * @return \\Illuminate\\Validation\\PresenceVerifierInterface\n * @static\n */\n public static function getPresenceVerifier()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getPresenceVerifier();\n }\n\n /**\n * Set the Presence Verifier implementation.\n *\n * @param \\Illuminate\\Validation\\PresenceVerifierInterface $presenceVerifier\n * @return void\n * @static\n */\n public static function setPresenceVerifier($presenceVerifier)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->setPresenceVerifier($presenceVerifier);\n }\n\n /**\n * Get the container instance used by the validation factory.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container|null\n * @static\n */\n public static function getContainer()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the validation factory.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Validation\\Factory\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->setContainer($container);\n }\n\n }\n /**\n * @see \\Illuminate\\View\\Factory\n */\n class View {\n /**\n * Get the evaluated view contents for the given view.\n *\n * @param string $path\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @static\n */\n public static function file($path, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->file($path, $data, $mergeData);\n }\n\n /**\n * Get the evaluated view contents for the given view.\n *\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @static\n */\n public static function make($view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->make($view, $data, $mergeData);\n }\n\n /**\n * Get the first view that actually exists from the given list.\n *\n * @param array $views\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function first($views, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->first($views, $data, $mergeData);\n }\n\n /**\n * Get the rendered content of the view based on a given condition.\n *\n * @param bool $condition\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return string\n * @static\n */\n public static function renderWhen($condition, $view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderWhen($condition, $view, $data, $mergeData);\n }\n\n /**\n * Get the rendered content of the view based on the negation of a given condition.\n *\n * @param bool $condition\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return string\n * @static\n */\n public static function renderUnless($condition, $view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderUnless($condition, $view, $data, $mergeData);\n }\n\n /**\n * Get the rendered contents of a partial from a loop.\n *\n * @param string $view\n * @param array $data\n * @param string $iterator\n * @param string $empty\n * @return string\n * @static\n */\n public static function renderEach($view, $data, $iterator, $empty = 'raw|')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderEach($view, $data, $iterator, $empty);\n }\n\n /**\n * Determine if a given view exists.\n *\n * @param string $view\n * @return bool\n * @static\n */\n public static function exists($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->exists($view);\n }\n\n /**\n * Get the appropriate view engine for the given path.\n *\n * @param string $path\n * @return \\Illuminate\\Contracts\\View\\Engine\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function getEngineFromPath($path)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getEngineFromPath($path);\n }\n\n /**\n * Add a piece of shared data to the environment.\n *\n * @param array|string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function share($key, $value = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->share($key, $value);\n }\n\n /**\n * Increment the rendering counter.\n *\n * @return void\n * @static\n */\n public static function incrementRender()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->incrementRender();\n }\n\n /**\n * Decrement the rendering counter.\n *\n * @return void\n * @static\n */\n public static function decrementRender()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->decrementRender();\n }\n\n /**\n * Check if there are no active render operations.\n *\n * @return bool\n * @static\n */\n public static function doneRendering()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->doneRendering();\n }\n\n /**\n * Determine if the given once token has been rendered.\n *\n * @param string $id\n * @return bool\n * @static\n */\n public static function hasRenderedOnce($id)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->hasRenderedOnce($id);\n }\n\n /**\n * Mark the given once token as having been rendered.\n *\n * @param string $id\n * @return void\n * @static\n */\n public static function markAsRenderedOnce($id)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->markAsRenderedOnce($id);\n }\n\n /**\n * Add a location to the array of view locations.\n *\n * @param string $location\n * @return void\n * @static\n */\n public static function addLocation($location)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addLocation($location);\n }\n\n /**\n * Prepend a location to the array of view locations.\n *\n * @param string $location\n * @return void\n * @static\n */\n public static function prependLocation($location)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->prependLocation($location);\n }\n\n /**\n * Add a new namespace to the loader.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function addNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->addNamespace($namespace, $hints);\n }\n\n /**\n * Prepend a new namespace to the loader.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function prependNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->prependNamespace($namespace, $hints);\n }\n\n /**\n * Replace the namespace hints for the given namespace.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function replaceNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->replaceNamespace($namespace, $hints);\n }\n\n /**\n * Register a valid view extension and its engine.\n *\n * @param string $extension\n * @param string $engine\n * @param \\Closure|null $resolver\n * @return void\n * @static\n */\n public static function addExtension($extension, $engine, $resolver = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addExtension($extension, $engine, $resolver);\n }\n\n /**\n * Flush all of the factory state like sections and stacks.\n *\n * @return void\n * @static\n */\n public static function flushState()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushState();\n }\n\n /**\n * Flush all of the section contents if done rendering.\n *\n * @return void\n * @static\n */\n public static function flushStateIfDoneRendering()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushStateIfDoneRendering();\n }\n\n /**\n * Get the extension to engine bindings.\n *\n * @return array\n * @static\n */\n public static function getExtensions()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getExtensions();\n }\n\n /**\n * Get the engine resolver instance.\n *\n * @return \\Illuminate\\View\\Engines\\EngineResolver\n * @static\n */\n public static function getEngineResolver()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getEngineResolver();\n }\n\n /**\n * Get the view finder instance.\n *\n * @return \\Illuminate\\View\\ViewFinderInterface\n * @static\n */\n public static function getFinder()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFinder();\n }\n\n /**\n * Set the view finder instance.\n *\n * @param \\Illuminate\\View\\ViewFinderInterface $finder\n * @return void\n * @static\n */\n public static function setFinder($finder)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setFinder($finder);\n }\n\n /**\n * Flush the cache of views located by the finder.\n *\n * @return void\n * @static\n */\n public static function flushFinderCache()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushFinderCache();\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setDispatcher($events)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setDispatcher($events);\n }\n\n /**\n * Get the IoC container instance.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the IoC container instance.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return void\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setContainer($container);\n }\n\n /**\n * Get an item from the shared data.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function shared($key, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->shared($key, $default);\n }\n\n /**\n * Get all of the shared data for the environment.\n *\n * @return array\n * @static\n */\n public static function getShared()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getShared();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\View\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\View\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\View\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\View\\Factory::flushMacros();\n }\n\n /**\n * Start a component rendering process.\n *\n * @param \\Illuminate\\Contracts\\View\\View|\\Illuminate\\Contracts\\Support\\Htmlable|\\Closure|string $view\n * @param array $data\n * @return void\n * @static\n */\n public static function startComponent($view, $data = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startComponent($view, $data);\n }\n\n /**\n * Get the first view that actually exists from the given list, and start a component.\n *\n * @param array $names\n * @param array $data\n * @return void\n * @static\n */\n public static function startComponentFirst($names, $data = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startComponentFirst($names, $data);\n }\n\n /**\n * Render the current component.\n *\n * @return string\n * @static\n */\n public static function renderComponent()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderComponent();\n }\n\n /**\n * Get an item from the component data that exists above the current component.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getConsumableComponentData($key, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getConsumableComponentData($key, $default);\n }\n\n /**\n * Start the slot rendering process.\n *\n * @param string $name\n * @param string|null $content\n * @param array $attributes\n * @return void\n * @static\n */\n public static function slot($name, $content = null, $attributes = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->slot($name, $content, $attributes);\n }\n\n /**\n * Save the slot content for rendering.\n *\n * @return void\n * @static\n */\n public static function endSlot()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->endSlot();\n }\n\n /**\n * Register a view creator event.\n *\n * @param array|string $views\n * @param \\Closure|string $callback\n * @return array\n * @static\n */\n public static function creator($views, $callback)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->creator($views, $callback);\n }\n\n /**\n * Register multiple view composers via an array.\n *\n * @param array $composers\n * @return array\n * @static\n */\n public static function composers($composers)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->composers($composers);\n }\n\n /**\n * Register a view composer event.\n *\n * @param array|string $views\n * @param \\Closure|string $callback\n * @return array\n * @static\n */\n public static function composer($views, $callback)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->composer($views, $callback);\n }\n\n /**\n * Call the composer for a given view.\n *\n * @param \\Illuminate\\Contracts\\View\\View $view\n * @return void\n * @static\n */\n public static function callComposer($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->callComposer($view);\n }\n\n /**\n * Call the creator for a given view.\n *\n * @param \\Illuminate\\Contracts\\View\\View $view\n * @return void\n * @static\n */\n public static function callCreator($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->callCreator($view);\n }\n\n /**\n * Start injecting content into a fragment.\n *\n * @param string $fragment\n * @return void\n * @static\n */\n public static function startFragment($fragment)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startFragment($fragment);\n }\n\n /**\n * Stop injecting content into a fragment.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopFragment()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopFragment();\n }\n\n /**\n * Get the contents of a fragment.\n *\n * @param string $name\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function getFragment($name, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFragment($name, $default);\n }\n\n /**\n * Get the entire array of rendered fragments.\n *\n * @return array\n * @static\n */\n public static function getFragments()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFragments();\n }\n\n /**\n * Flush all of the fragments.\n *\n * @return void\n * @static\n */\n public static function flushFragments()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushFragments();\n }\n\n /**\n * Start injecting content into a section.\n *\n * @param string $section\n * @param string|null $content\n * @return void\n * @static\n */\n public static function startSection($section, $content = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startSection($section, $content);\n }\n\n /**\n * Inject inline content into a section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function inject($section, $content)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->inject($section, $content);\n }\n\n /**\n * Stop injecting content into a section and return its contents.\n *\n * @return string\n * @static\n */\n public static function yieldSection()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldSection();\n }\n\n /**\n * Stop injecting content into a section.\n *\n * @param bool $overwrite\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopSection($overwrite = false)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopSection($overwrite);\n }\n\n /**\n * Stop injecting content into a section and append it.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function appendSection()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->appendSection();\n }\n\n /**\n * Get the string contents of a section.\n *\n * @param string $section\n * @param string $default\n * @return string\n * @static\n */\n public static function yieldContent($section, $default = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldContent($section, $default);\n }\n\n /**\n * Get the parent placeholder for the current request.\n *\n * @param string $section\n * @return string\n * @static\n */\n public static function parentPlaceholder($section = '')\n {\n return \\Illuminate\\View\\Factory::parentPlaceholder($section);\n }\n\n /**\n * Check if section exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasSection($name)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->hasSection($name);\n }\n\n /**\n * Check if section does not exist.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function sectionMissing($name)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->sectionMissing($name);\n }\n\n /**\n * Get the contents of a section.\n *\n * @param string $name\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function getSection($name, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getSection($name, $default);\n }\n\n /**\n * Get the entire array of sections.\n *\n * @return array\n * @static\n */\n public static function getSections()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getSections();\n }\n\n /**\n * Flush all of the sections.\n *\n * @return void\n * @static\n */\n public static function flushSections()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushSections();\n }\n\n /**\n * Add new loop to the stack.\n *\n * @param \\Countable|array $data\n * @return void\n * @static\n */\n public static function addLoop($data)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addLoop($data);\n }\n\n /**\n * Increment the top loop's indices.\n *\n * @return void\n * @static\n */\n public static function incrementLoopIndices()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->incrementLoopIndices();\n }\n\n /**\n * Pop a loop from the top of the loop stack.\n *\n * @return void\n * @static\n */\n public static function popLoop()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->popLoop();\n }\n\n /**\n * Get an instance of the last loop in the stack.\n *\n * @return \\stdClass|null\n * @static\n */\n public static function getLastLoop()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getLastLoop();\n }\n\n /**\n * Get the entire loop stack.\n *\n * @return array\n * @static\n */\n public static function getLoopStack()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getLoopStack();\n }\n\n /**\n * Start injecting content into a push section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function startPush($section, $content = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startPush($section, $content);\n }\n\n /**\n * Stop injecting content into a push section.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopPush()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopPush();\n }\n\n /**\n * Start prepending content into a push section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function startPrepend($section, $content = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startPrepend($section, $content);\n }\n\n /**\n * Stop prepending content into a push section.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopPrepend()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopPrepend();\n }\n\n /**\n * Get the string contents of a push section.\n *\n * @param string $section\n * @param string $default\n * @return string\n * @static\n */\n public static function yieldPushContent($section, $default = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldPushContent($section, $default);\n }\n\n /**\n * Flush all of the stacks.\n *\n * @return void\n * @static\n */\n public static function flushStacks()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushStacks();\n }\n\n /**\n * Start a translation block.\n *\n * @param array $replacements\n * @return void\n * @static\n */\n public static function startTranslation($replacements = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startTranslation($replacements);\n }\n\n /**\n * Render the current translation.\n *\n * @return string\n * @static\n */\n public static function renderTranslation()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderTranslation();\n }\n\n }\n /**\n * @see \\Illuminate\\Foundation\\Vite\n */\n class Vite {\n /**\n * Get the preloaded assets.\n *\n * @return array\n * @static\n */\n public static function preloadedAssets()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->preloadedAssets();\n }\n\n /**\n * Get the Content Security Policy nonce applied to all generated tags.\n *\n * @return string|null\n * @static\n */\n public static function cspNonce()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->cspNonce();\n }\n\n /**\n * Generate or set a Content Security Policy nonce to apply to all generated tags.\n *\n * @param string|null $nonce\n * @return string\n * @static\n */\n public static function useCspNonce($nonce = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useCspNonce($nonce);\n }\n\n /**\n * Use the given key to detect integrity hashes in the manifest.\n *\n * @param string|false $key\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useIntegrityKey($key)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useIntegrityKey($key);\n }\n\n /**\n * Set the Vite entry points.\n *\n * @param array $entryPoints\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function withEntryPoints($entryPoints)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->withEntryPoints($entryPoints);\n }\n\n /**\n * Merge additional Vite entry points with the current set.\n *\n * @param array $entryPoints\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function mergeEntryPoints($entryPoints)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->mergeEntryPoints($entryPoints);\n }\n\n /**\n * Set the filename for the manifest file.\n *\n * @param string $filename\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useManifestFilename($filename)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useManifestFilename($filename);\n }\n\n /**\n * Resolve asset paths using the provided resolver.\n *\n * @param callable|null $resolver\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function createAssetPathsUsing($resolver)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->createAssetPathsUsing($resolver);\n }\n\n /**\n * Get the Vite \"hot\" file path.\n *\n * @return string\n * @static\n */\n public static function hotFile()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->hotFile();\n }\n\n /**\n * Set the Vite \"hot\" file path.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useHotFile($path)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useHotFile($path);\n }\n\n /**\n * Set the Vite build directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useBuildDirectory($path)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useBuildDirectory($path);\n }\n\n /**\n * Use the given callback to resolve attributes for script tags.\n *\n * @param (callable(string, string, ?array, ?array): array)|array $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useScriptTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useScriptTagAttributes($attributes);\n }\n\n /**\n * Use the given callback to resolve attributes for style tags.\n *\n * @param (callable(string, string, ?array, ?array): array)|array $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useStyleTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useStyleTagAttributes($attributes);\n }\n\n /**\n * Use the given callback to resolve attributes for preload tags.\n *\n * @param (callable(string, string, ?array, ?array): (array|false))|array|false $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function usePreloadTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->usePreloadTagAttributes($attributes);\n }\n\n /**\n * Eagerly prefetch assets.\n *\n * @param int|null $concurrency\n * @param string $event\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function prefetch($concurrency = null, $event = 'load')\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->prefetch($concurrency, $event);\n }\n\n /**\n * Use the \"waterfall\" prefetching strategy.\n *\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useWaterfallPrefetching($concurrency = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useWaterfallPrefetching($concurrency);\n }\n\n /**\n * Use the \"aggressive\" prefetching strategy.\n *\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useAggressivePrefetching()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useAggressivePrefetching();\n }\n\n /**\n * Set the prefetching strategy.\n *\n * @param 'waterfall'|'aggressive'|null $strategy\n * @param array $config\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function usePrefetchStrategy($strategy, $config = [])\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->usePrefetchStrategy($strategy, $config);\n }\n\n /**\n * Generate React refresh runtime script.\n *\n * @return \\Illuminate\\Support\\HtmlString|void\n * @static\n */\n public static function reactRefresh()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->reactRefresh();\n }\n\n /**\n * Get the URL for an asset.\n *\n * @param string $asset\n * @param string|null $buildDirectory\n * @return string\n * @static\n */\n public static function asset($asset, $buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->asset($asset, $buildDirectory);\n }\n\n /**\n * Get the content of a given asset.\n *\n * @param string $asset\n * @param string|null $buildDirectory\n * @return string\n * @throws \\Illuminate\\Foundation\\ViteException\n * @static\n */\n public static function content($asset, $buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->content($asset, $buildDirectory);\n }\n\n /**\n * Get a unique hash representing the current manifest, or null if there is no manifest.\n *\n * @param string|null $buildDirectory\n * @return string|null\n * @static\n */\n public static function manifestHash($buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->manifestHash($buildDirectory);\n }\n\n /**\n * Determine if the HMR server is running.\n *\n * @return bool\n * @static\n */\n public static function isRunningHot()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->isRunningHot();\n }\n\n /**\n * Get the Vite tag content as a string of HTML.\n *\n * @return string\n * @static\n */\n public static function toHtml()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->toHtml();\n }\n\n /**\n * Flush state.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n $instance->flush();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Foundation\\Vite::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Foundation\\Vite::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Foundation\\Vite::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Foundation\\Vite::flushMacros();\n }\n\n }\n /**\n * @method static void createSubscription(array|string $channels, \\Closure $callback, string $method = 'subscribe')\n * @method static \\Illuminate\\Redis\\Limiters\\ConcurrencyLimiterBuilder funnel(string $name)\n * @method static \\Illuminate\\Redis\\Limiters\\DurationLimiterBuilder throttle(string $name)\n * @method static mixed client()\n * @method static void subscribe(array|string $channels, \\Closure $callback)\n * @method static void psubscribe(array|string $channels, \\Closure $callback)\n * @method static mixed command(string $method, array $parameters = [])\n * @method static void listen(\\Closure $callback)\n * @method static string|null getName()\n * @method static \\Illuminate\\Redis\\Connections\\Connection setName(string $name)\n * @method static \\Illuminate\\Contracts\\Events\\Dispatcher getEventDispatcher()\n * @method static void setEventDispatcher(\\Illuminate\\Contracts\\Events\\Dispatcher $events)\n * @method static void unsetEventDispatcher()\n * @method static void macro(string $name, object|callable $macro)\n * @method static void mixin(object $mixin, bool $replace = true)\n * @method static bool hasMacro(string $name)\n * @method static void flushMacros()\n * @method static mixed macroCall(string $method, array $parameters)\n * @see \\Illuminate\\Redis\\RedisManager\n */\n class Redis {\n /**\n * Get a Redis connection by name.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Resolve the given connection by name.\n *\n * @param string|null $name\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function resolve($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->resolve($name);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array\n * @static\n */\n public static function connections()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->connections();\n }\n\n /**\n * Enable the firing of Redis command events.\n *\n * @return void\n * @static\n */\n public static function enableEvents()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->enableEvents();\n }\n\n /**\n * Disable the firing of Redis command events.\n *\n * @return void\n * @static\n */\n public static function disableEvents()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->disableEvents();\n }\n\n /**\n * Set the default driver.\n *\n * @param string $driver\n * @return void\n * @static\n */\n public static function setDriver($driver)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->setDriver($driver);\n }\n\n /**\n * Disconnect the given connection and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Redis\\RedisManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n }\n }\n\nnamespace Aws\\Laravel {\n /**\n * Facade for the AWS service\n *\n */\n class AwsFacade {\n /**\n * Get a client by name using an array of constructor options.\n *\n * @param string $name Service name or namespace (e.g., DynamoDb, s3).\n * @param array $args Arguments to configure the client.\n * @return \\Aws\\AwsClientInterface\n * @throws \\InvalidArgumentException if any required options are missing or\n * the service is not supported.\n * @see Aws\\AwsClient::__construct for a list of available options for args.\n * @static\n */\n public static function createClient($name, $args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->createClient($name, $args);\n }\n\n /**\n * @static\n */\n public static function createMultiRegionClient($name, $args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->createMultiRegionClient($name, $args);\n }\n\n /**\n * Clone existing SDK instance with ability to pass an associative array\n * of extra client settings.\n *\n * @param array $args\n * @return self\n * @static\n */\n public static function copy($args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->copy($args);\n }\n\n /**\n * Determine the endpoint prefix from a client namespace.\n *\n * @param string $name Namespace name\n * @return string\n * @internal\n * @deprecated Use the `\\Aws\\manifest()` function instead.\n * @static\n */\n public static function getEndpointPrefix($name)\n {\n return \\Aws\\Sdk::getEndpointPrefix($name);\n }\n\n }\n }\n\nnamespace Laravolt\\Avatar {\n /**\n */\n class Facade {\n /**\n * @static\n */\n public static function setGenerator($generator)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setGenerator($generator);\n }\n\n /**\n * @static\n */\n public static function create($name)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->create($name);\n }\n\n /**\n * @static\n */\n public static function applyTheme($config)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->applyTheme($config);\n }\n\n /**\n * @static\n */\n public static function addTheme($name, $config)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->addTheme($name, $config);\n }\n\n /**\n * @static\n */\n public static function toBase64()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toBase64();\n }\n\n /**\n * @static\n */\n public static function save($path, $quality = 90)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->save($path, $quality);\n }\n\n /**\n * @static\n */\n public static function toSvg()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toSvg();\n }\n\n /**\n * @static\n */\n public static function toGravatar($param = null)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toGravatar($param);\n }\n\n /**\n * @static\n */\n public static function getInitial()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getInitial();\n }\n\n /**\n * @static\n */\n public static function getImageObject()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getImageObject();\n }\n\n /**\n * @static\n */\n public static function buildAvatar()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->buildAvatar();\n }\n\n /**\n * @static\n */\n public static function getAttribute($key)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getAttribute($key);\n }\n\n /**\n * Get background color\n *\n * @static\n */\n public static function getBackground()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getBackground();\n }\n\n /**\n * Get foreground color\n *\n * @static\n */\n public static function getForeground()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getForeground();\n }\n\n /**\n * Get shape\n *\n * @static\n */\n public static function getShape()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getShape();\n }\n\n /**\n * @static\n */\n public static function setTheme($theme)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setTheme($theme);\n }\n\n /**\n * @static\n */\n public static function setBackground($hex)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBackground($hex);\n }\n\n /**\n * @static\n */\n public static function setForeground($hex)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setForeground($hex);\n }\n\n /**\n * @static\n */\n public static function setDimension($width, $height = null)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setDimension($width, $height);\n }\n\n /**\n * @static\n */\n public static function setResponsive($responsive)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setResponsive($responsive);\n }\n\n /**\n * @static\n */\n public static function setFontSize($size)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFontSize($size);\n }\n\n /**\n * @static\n */\n public static function setFontFamily($font)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFontFamily($font);\n }\n\n /**\n * @static\n */\n public static function setBorder($size, $color, $radius = 0)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBorder($size, $color, $radius);\n }\n\n /**\n * @static\n */\n public static function setBorderRadius($radius)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBorderRadius($radius);\n }\n\n /**\n * @static\n */\n public static function setShape($shape)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setShape($shape);\n }\n\n /**\n * @static\n */\n public static function setChars($chars)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setChars($chars);\n }\n\n /**\n * @static\n */\n public static function setFont($font)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFont($font);\n }\n\n }\n }\n\nnamespace Spatie\\Fractal\\Facades {\n /**\n * @see \\Spatie\\Fractal\\Fractal\n */\n class Fractal extends \\Spatie\\Fractalistic\\Fractal {\n /**\n * @param null|mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|\\League\\Fractal\\Serializer\\SerializerAbstract $serializer\n * @return static\n * @static\n */\n public static function create($data = null, $transformer = null, $serializer = null)\n {\n return \\Spatie\\Fractal\\Fractal::create($data, $transformer, $serializer);\n }\n\n /**\n * @static\n */\n public static function respond($statusCode = 200, $headers = [], $options = 0)\n {\n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->respond($statusCode, $headers, $options);\n }\n\n /**\n * Set the collection data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function collection($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->collection($data, $transformer, $resourceName);\n }\n\n /**\n * Set the item data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function item($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->item($data, $transformer, $resourceName);\n }\n\n /**\n * Set the primitive data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function primitive($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->primitive($data, $transformer, $resourceName);\n }\n\n /**\n * Set the data that must be transformed.\n *\n * @param string $dataType\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function data($dataType, $data, $transformer = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->data($dataType, $data, $transformer);\n }\n\n /**\n * Set the class or function that will perform the transform.\n *\n * @param string|callable|\\League\\Fractal\\TransformerAbstract|null $transformer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function transformWith($transformer)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->transformWith($transformer);\n }\n\n /**\n * Set the serializer to be used.\n *\n * @param string|\\League\\Fractal\\Serializer\\SerializerAbstract $serializer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function serializeWith($serializer)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->serializeWith($serializer);\n }\n\n /**\n * Set a Fractal paginator for the data.\n *\n * @param \\League\\Fractal\\Pagination\\PaginatorInterface $paginator\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function paginateWith($paginator)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->paginateWith($paginator);\n }\n\n /**\n * Set a Fractal cursor for the data.\n *\n * @param \\League\\Fractal\\Pagination\\CursorInterface $cursor\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function withCursor($cursor)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->withCursor($cursor);\n }\n\n /**\n * Specify the includes.\n *\n * @param array|string $includes Array or string of resources to include.\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseIncludes($includes)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseIncludes($includes);\n }\n\n /**\n * Specify the excludes.\n *\n * @param array|string $excludes Array or string of resources to exclude.\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseExcludes($excludes)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseExcludes($excludes);\n }\n\n /**\n * Specify the fieldsets to include in the response.\n *\n * @param array $fieldsets array with key = resourceName and value = fields to include\n * (array or comma separated string with field names)\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseFieldsets($fieldsets)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseFieldsets($fieldsets);\n }\n\n /**\n * Set the meta data.\n *\n * @param $array,...\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function addMeta()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->addMeta();\n }\n\n /**\n * Set the resource name, to replace 'data' as the root of the collection or item.\n *\n * @param string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function withResourceName($resourceName)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->withResourceName($resourceName);\n }\n\n /**\n * Upper limit to how many levels of included data are allowed.\n *\n * @param int $recursionLimit\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function limitRecursion($recursionLimit)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->limitRecursion($recursionLimit);\n }\n\n /**\n * Perform the transformation to json.\n *\n * @param int $options\n * @return string\n * @static\n */\n public static function toJson($options = 0)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->toJson($options);\n }\n\n /**\n * Perform the transformation to array.\n *\n * @return array|null\n * @static\n */\n public static function toArray()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->toArray();\n }\n\n /**\n * Create fractal data.\n *\n * @return \\League\\Fractal\\Scope\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @throws \\Spatie\\Fractalistic\\Exceptions\\NoTransformerSpecified\n * @static\n */\n public static function createData()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->createData();\n }\n\n /**\n * Get the resource class.\n *\n * @return string\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @static\n */\n public static function getResourceClass()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResourceClass();\n }\n\n /**\n * Get the resource.\n *\n * @return \\League\\Fractal\\Resource\\ResourceInterface\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @static\n */\n public static function getResource()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResource();\n }\n\n /**\n * Return the name of the resource.\n *\n * @return string|null\n * @static\n */\n public static function getResourceName()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResourceName();\n }\n\n /**\n * Convert the object into something JSON serializable.\n *\n * @return array|null\n * @static\n */\n public static function jsonSerialize()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->jsonSerialize();\n }\n\n /**\n * Get the transformer.\n *\n * @return string|callable|\\League\\Fractal\\TransformerAbstract|null\n * @static\n */\n public static function getTransformer()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getTransformer();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Spatie\\Fractal\\Fractal::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Spatie\\Fractal\\Fractal::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Spatie\\Fractal\\Fractal::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Spatie\\Fractal\\Fractal::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n }\n\nnamespace Laratrust {\n /**\n */\n class LaratrustFacade {\n /**\n * Checks if the current user has a role by its name.\n *\n * @static\n */\n public static function hasRole($role, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->hasRole($role, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a permission by its name.\n *\n * @static\n */\n public static function hasPermission($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->hasPermission($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user does not have a permission by its name.\n *\n * @static\n */\n public static function doesntHavePermission($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->doesntHavePermission($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a permission by its name.\n * \n * Alias to hasPermission.\n *\n * @static\n */\n public static function isAbleTo($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->isAbleTo($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user does not have a permission by its name.\n * \n * Alias to doesntHavePermission.\n *\n * @static\n */\n public static function isNotAbleTo($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->isNotAbleTo($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a role or permission by its name.\n *\n * @param array|string $roles The role(s) needed.\n * @param array|string $permissions The permission(s) needed.\n * @param array $options The Options.\n * @return bool\n * @static\n */\n public static function ability($roles, $permissions, $team = null, $options = [])\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->ability($roles, $permissions, $team, $options);\n }\n\n }\n }\n\nnamespace Sentry\\Laravel {\n /**\n * @see \\Sentry\\State\\HubInterface\n */\n class Facade {\n /**\n * Gets the client bound to the top of the stack.\n *\n * @static\n */\n public static function getClient()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getClient();\n }\n\n /**\n * Gets the ID of the last captured event.\n *\n * @static\n */\n public static function getLastEventId()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getLastEventId();\n }\n\n /**\n * Creates a new scope to store context information that will be layered on\n * top of the current one. It is isolated, i.e. all breadcrumbs and context\n * information added to this scope will be removed once the scope ends. Be\n * sure to always remove this scope with {@see Hub::popScope} when the\n * operation finishes or throws.\n *\n * @static\n */\n public static function pushScope()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->pushScope();\n }\n\n /**\n * Removes a previously pushed scope from the stack. This restores the state\n * before the scope was pushed. All breadcrumbs and context information added\n * since the last call to {@see Hub::pushScope} are discarded.\n *\n * @static\n */\n public static function popScope()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->popScope();\n }\n\n /**\n * Creates a new scope with and executes the given operation within. The scope\n * is automatically removed once the operation finishes or throws.\n *\n * @param callable $callback The callback to be executed\n * @return mixed|void The callback's return value, upon successful execution\n * @psalm-template T\n * @psalm-param callable(Scope): T $callback\n * @psalm-return T\n * @static\n */\n public static function withScope($callback)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->withScope($callback);\n }\n\n /**\n * Calls the given callback passing to it the current scope so that any\n * operation can be run within its context.\n *\n * @static\n */\n public static function configureScope($callback)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->configureScope($callback);\n }\n\n /**\n * Binds the given client to the current scope.\n *\n * @static\n */\n public static function bindClient($client)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->bindClient($client);\n }\n\n /**\n * Captures a message event and sends it to Sentry.\n *\n * @static\n */\n public static function captureMessage($message, $level = null, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureMessage($message, $level, $hint);\n }\n\n /**\n * Captures an exception event and sends it to Sentry.\n *\n * @static\n */\n public static function captureException($exception, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureException($exception, $hint);\n }\n\n /**\n * Captures a new event using the provided data.\n *\n * @static\n */\n public static function captureEvent($event, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureEvent($event, $hint);\n }\n\n /**\n * Captures an event that logs the last occurred error.\n *\n * @static\n */\n public static function captureLastError($hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureLastError($hint);\n }\n\n /**\n * Captures a check-in.\n *\n * @param int|float|null $duration\n * @param int|float|null $duration\n * @static\n */\n public static function captureCheckIn($slug, $status, $duration = null, $monitorConfig = null, $checkInId = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureCheckIn($slug, $status, $duration, $monitorConfig, $checkInId);\n }\n\n /**\n * Records a new breadcrumb which will be attached to future events. They\n * will be added to subsequent events to provide more context on user's\n * actions prior to an error or crash.\n *\n * @static\n */\n public static function addBreadcrumb($breadcrumb)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->addBreadcrumb($breadcrumb);\n }\n\n /**\n * Gets the integration whose FQCN matches the given one if it's available on the current client.\n *\n * @param string $className The FQCN of the integration\n * @psalm-template T of IntegrationInterface\n * @psalm-param class-string<T> $className\n * @psalm-return T|null\n * @static\n */\n public static function getIntegration($className)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getIntegration($className);\n }\n\n /**\n * Starts a new `Transaction` and returns it. This is the entry point to manual\n * tracing instrumentation.\n * \n * A tree structure can be built by adding child spans to the transaction, and\n * child spans to other spans. To start a new child span within the transaction\n * or any span, call the respective `startChild()` method.\n * \n * Every child span must be finished before the transaction is finished,\n * otherwise the unfinished spans are discarded.\n * \n * The transaction must be finished with a call to its `finish()` method, at\n * which point the transaction with all its finished child spans will be sent to\n * Sentry.\n *\n * @param array<string, mixed> $customSamplingContext Additional context that will be passed to the {@see SamplingContext}\n * @param array<string, mixed> $customSamplingContext Additional context that will be passed to the {@see SamplingContext}\n * @static\n */\n public static function startTransaction($context, $customSamplingContext = [])\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->startTransaction($context, $customSamplingContext);\n }\n\n /**\n * Returns the transaction that is on the Hub.\n *\n * @static\n */\n public static function getTransaction()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getTransaction();\n }\n\n /**\n * Sets the span on the Hub.\n *\n * @static\n */\n public static function setSpan($span)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->setSpan($span);\n }\n\n /**\n * Returns the span that is on the Hub.\n *\n * @static\n */\n public static function getSpan()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getSpan();\n }\n\n }\n }\n\nnamespace League\\StatsD\\Laravel5\\Facade {\n /**\n * Facade for Statsd Package\n *\n * @author Aran Wilkinson <aran@aranw.net>\n * @package League\\StatsD\\Laravel5\\Facade\n */\n class StatsdFacade {\n /**\n * Singleton Reference\n *\n * @static\n */\n public static function instance($name = 'default')\n {\n return \\League\\StatsD\\Client::instance($name);\n }\n\n /**\n * Initialize Connection Details\n *\n * @param array $options Configuration options\n * @return \\League\\StatsD\\Client This instance\n * @throws ConfigurationException If port is invalid\n * @static\n */\n public static function configure($options = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->configure($options);\n }\n\n /**\n * @static\n */\n public static function getHost()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getHost();\n }\n\n /**\n * @static\n */\n public static function getPort()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getPort();\n }\n\n /**\n * @static\n */\n public static function getNamespace()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getNamespace();\n }\n\n /**\n * Get Last message sent to server\n *\n * @static\n */\n public static function getLastMessage()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getLastMessage();\n }\n\n /**\n * Increment a metric\n *\n * @param string|array $metrics Metric(s) to increment\n * @param int $delta Value to decrement the metric by\n * @param float $sampleRate Sample rate of metric\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function increment($metrics, $delta = 1, $sampleRate = 1.0, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->increment($metrics, $delta, $sampleRate, $tags);\n }\n\n /**\n * Decrement a metric\n *\n * @param string|array $metrics Metric(s) to decrement\n * @param int $delta Value to increment the metric by\n * @param float $sampleRate Sample rate of metric\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function decrement($metrics, $delta = 1, $sampleRate = 1.0, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->decrement($metrics, $delta, $sampleRate, $tags);\n }\n\n /**\n * Start timing the given metric\n *\n * @param string $metric Metric to time\n * @static\n */\n public static function startTiming($metric)\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->startTiming($metric);\n }\n\n /**\n * End timing the given metric and record\n *\n * @param string $metric Metric to time\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function endTiming($metric, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->endTiming($metric, $tags);\n }\n\n /**\n * Timing\n *\n * @param string $metric Metric to track\n * @param float $time Time in milliseconds\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function timing($metric, $time, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->timing($metric, $time, $tags);\n }\n\n /**\n * Send multiple timing metrics at once\n *\n * @param array $metrics key value map of metric name -> timing value\n * @throws ConnectionException\n * @static\n */\n public static function timings($metrics)\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->timings($metrics);\n }\n\n /**\n * Time a function\n *\n * @param string $metric Metric to time\n * @param callable $func Function to record\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function time($metric, $func, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->time($metric, $func, $tags);\n }\n\n /**\n * Gauges\n *\n * @param string $metric Metric to gauge\n * @param int|float $value Set the value of the gauge\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function gauge($metric, $value, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->gauge($metric, $value, $tags);\n }\n\n /**\n * Sets - count the number of unique values passed to a key\n *\n * @param string $metric\n * @param mixed $value\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function set($metric, $value, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->set($metric, $value, $tags);\n }\n\n }\n }\n\nnamespace Barryvdh\\Debugbar\\Facades {\n /**\n * @method static void alert(mixed $message)\n * @method static void critical(mixed $message)\n * @method static void debug(mixed $message)\n * @method static void emergency(mixed $message)\n * @method static void error(mixed $message)\n * @method static void info(mixed $message)\n * @method static void log(mixed $message)\n * @method static void notice(mixed $message)\n * @method static void warning(mixed $message)\n * @see \\Barryvdh\\Debugbar\\LaravelDebugbar\n */\n class Debugbar extends \\DebugBar\\DebugBar {\n /**\n * Returns the HTTP driver\n * \n * If no http driver where defined, a PhpHttpDriver is automatically created\n *\n * @return \\DebugBar\\HttpDriverInterface\n * @static\n */\n public static function getHttpDriver()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getHttpDriver();\n }\n\n /**\n * Enable the Debugbar and boot, if not already booted.\n *\n * @static\n */\n public static function enable()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->enable();\n }\n\n /**\n * Boot the debugbar (add collectors, renderer and listener)\n *\n * @static\n */\n public static function boot()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->boot();\n }\n\n /**\n * @static\n */\n public static function shouldCollect($name, $default = false)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->shouldCollect($name, $default);\n }\n\n /**\n * Adds a data collector\n *\n * @param \\DebugBar\\DataCollector\\DataCollectorInterface $collector\n * @throws DebugBarException\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function addCollector($collector)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addCollector($collector);\n }\n\n /**\n * Handle silenced errors\n *\n * @param $level\n * @param $message\n * @param string $file\n * @param int $line\n * @param array $context\n * @throws \\ErrorException\n * @static\n */\n public static function handleError($level, $message, $file = '', $line = 0, $context = [])\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->handleError($level, $message, $file, $line, $context);\n }\n\n /**\n * Starts a measure\n *\n * @param string $name Internal name, used to stop the measure\n * @param string $label Public name\n * @param string|null $collector\n * @param string|null $group\n * @static\n */\n public static function startMeasure($name, $label = null, $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->startMeasure($name, $label, $collector, $group);\n }\n\n /**\n * Stops a measure\n *\n * @param string $name\n * @static\n */\n public static function stopMeasure($name)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->stopMeasure($name);\n }\n\n /**\n * Adds an exception to be profiled in the debug bar\n *\n * @param \\Exception $e\n * @deprecated in favor of addThrowable\n * @static\n */\n public static function addException($e)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addException($e);\n }\n\n /**\n * Adds an exception to be profiled in the debug bar\n *\n * @param \\Throwable $e\n * @static\n */\n public static function addThrowable($e)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addThrowable($e);\n }\n\n /**\n * Returns a JavascriptRenderer for this instance\n *\n * @param string $baseUrl\n * @param string $basePath\n * @return \\Barryvdh\\Debugbar\\JavascriptRenderer\n * @static\n */\n public static function getJavascriptRenderer($baseUrl = null, $basePath = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getJavascriptRenderer($baseUrl, $basePath);\n }\n\n /**\n * Modify the response and inject the debugbar (or data in headers)\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param \\Symfony\\Component\\HttpFoundation\\Response $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function modifyResponse($request, $response)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->modifyResponse($request, $response);\n }\n\n /**\n * Check if the Debugbar is enabled\n *\n * @return boolean\n * @static\n */\n public static function isEnabled()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isEnabled();\n }\n\n /**\n * Collects the data from the collectors\n *\n * @return array\n * @static\n */\n public static function collect()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->collect();\n }\n\n /**\n * Injects the web debug toolbar into the given Response.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Response $response A Response instance\n * Based on https://github.com/symfony/WebProfilerBundle/blob/master/EventListener/WebDebugToolbarListener.php\n * @static\n */\n public static function injectDebugbar($response)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->injectDebugbar($response);\n }\n\n /**\n * Checks if there is stacked data in the session\n *\n * @return boolean\n * @static\n */\n public static function hasStackedData()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->hasStackedData();\n }\n\n /**\n * Returns the data stacked in the session\n *\n * @param boolean $delete Whether to delete the data in the session\n * @return array\n * @static\n */\n public static function getStackedData($delete = true)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStackedData($delete);\n }\n\n /**\n * Disable the Debugbar\n *\n * @static\n */\n public static function disable()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->disable();\n }\n\n /**\n * Adds a measure\n *\n * @param string $label\n * @param float $start\n * @param float $end\n * @param array|null $params\n * @param string|null $collector\n * @param string|null $group\n * @static\n */\n public static function addMeasure($label, $start, $end, $params = [], $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addMeasure($label, $start, $end, $params, $collector, $group);\n }\n\n /**\n * Utility function to measure the execution of a Closure\n *\n * @param string $label\n * @param \\Closure $closure\n * @param string|null $collector\n * @param string|null $group\n * @return mixed\n * @static\n */\n public static function measure($label, $closure, $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->measure($label, $closure, $collector, $group);\n }\n\n /**\n * Collect data in a CLI request\n *\n * @return array\n * @static\n */\n public static function collectConsole()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->collectConsole();\n }\n\n /**\n * Adds a message to the MessagesCollector\n * \n * A message can be anything from an object to a string\n *\n * @param mixed $message\n * @param string $label\n * @static\n */\n public static function addMessage($message, $label = 'info')\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addMessage($message, $label);\n }\n\n /**\n * Checks if a data collector has been added\n *\n * @param string $name\n * @return boolean\n * @static\n */\n public static function hasCollector($name)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->hasCollector($name);\n }\n\n /**\n * Returns a data collector\n *\n * @param string $name\n * @return \\DebugBar\\DataCollector\\DataCollectorInterface\n * @throws DebugBarException\n * @static\n */\n public static function getCollector($name)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCollector($name);\n }\n\n /**\n * Returns an array of all data collectors\n *\n * @return array[DataCollectorInterface]\n * @static\n */\n public static function getCollectors()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCollectors();\n }\n\n /**\n * Sets the request id generator\n *\n * @param \\DebugBar\\RequestIdGeneratorInterface $generator\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setRequestIdGenerator($generator)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setRequestIdGenerator($generator);\n }\n\n /**\n * @return \\DebugBar\\RequestIdGeneratorInterface\n * @static\n */\n public static function getRequestIdGenerator()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getRequestIdGenerator();\n }\n\n /**\n * Returns the id of the current request\n *\n * @return string\n * @static\n */\n public static function getCurrentRequestId()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCurrentRequestId();\n }\n\n /**\n * Sets the storage backend to use to store the collected data\n *\n * @param \\DebugBar\\StorageInterface $storage\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStorage($storage = null)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStorage($storage);\n }\n\n /**\n * @return \\DebugBar\\StorageInterface\n * @static\n */\n public static function getStorage()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStorage();\n }\n\n /**\n * Checks if the data will be persisted\n *\n * @return boolean\n * @static\n */\n public static function isDataPersisted()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isDataPersisted();\n }\n\n /**\n * Sets the HTTP driver\n *\n * @param \\DebugBar\\HttpDriverInterface $driver\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setHttpDriver($driver)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setHttpDriver($driver);\n }\n\n /**\n * Returns collected data\n * \n * Will collect the data if none have been collected yet\n *\n * @return array\n * @static\n */\n public static function getData()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getData();\n }\n\n /**\n * Returns an array of HTTP headers containing the data\n *\n * @param string $headerName\n * @param integer $maxHeaderLength\n * @return array\n * @static\n */\n public static function getDataAsHeaders($headerName = 'phpdebugbar', $maxHeaderLength = 4096, $maxTotalHeaderLength = 250000)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getDataAsHeaders($headerName, $maxHeaderLength, $maxTotalHeaderLength);\n }\n\n /**\n * Sends the data through the HTTP headers\n *\n * @param bool $useOpenHandler\n * @param string $headerName\n * @param integer $maxHeaderLength\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function sendDataInHeaders($useOpenHandler = null, $headerName = 'phpdebugbar', $maxHeaderLength = 4096)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->sendDataInHeaders($useOpenHandler, $headerName, $maxHeaderLength);\n }\n\n /**\n * Stacks the data in the session for later rendering\n *\n * @static\n */\n public static function stackData()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->stackData();\n }\n\n /**\n * Sets the key to use in the $_SESSION array\n *\n * @param string $ns\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStackDataSessionNamespace($ns)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStackDataSessionNamespace($ns);\n }\n\n /**\n * Returns the key used in the $_SESSION array\n *\n * @return string\n * @static\n */\n public static function getStackDataSessionNamespace()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStackDataSessionNamespace();\n }\n\n /**\n * Sets whether to only use the session to store stacked data even\n * if a storage is enabled\n *\n * @param boolean $enabled\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStackAlwaysUseSessionStorage($enabled = true)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStackAlwaysUseSessionStorage($enabled);\n }\n\n /**\n * Checks if the session is always used to store stacked data\n * even if a storage is enabled\n *\n * @return boolean\n * @static\n */\n public static function isStackAlwaysUseSessionStorage()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isStackAlwaysUseSessionStorage();\n }\n\n /**\n * @static\n */\n public static function offsetSet($key, $value)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetSet($key, $value);\n }\n\n /**\n * @static\n */\n public static function offsetGet($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * @static\n */\n public static function offsetExists($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * @static\n */\n public static function offsetUnset($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetUnset($key);\n }\n\n }\n }\n\nnamespace Barryvdh\\DomPDF\\Facade {\n /**\n * @method static BasePDF setBaseHost(string $baseHost)\n * @method static BasePDF setBasePath(string $basePath)\n * @method static BasePDF setCanvas(\\Dompdf\\Canvas $canvas)\n * @method static BasePDF setCallbacks(array<string, mixed> $callbacks)\n * @method static BasePDF setCss(\\Dompdf\\Css\\Stylesheet $css)\n * @method static BasePDF setDefaultView(string $defaultView, array<string, mixed> $options)\n * @method static BasePDF setDom(\\DOMDocument $dom)\n * @method static BasePDF setFontMetrics(\\Dompdf\\FontMetrics $fontMetrics)\n * @method static BasePDF setHttpContext(resource|array<string, mixed> $httpContext)\n * @method static BasePDF setPaper(string|float[] $paper, string $orientation = 'portrait')\n * @method static BasePDF setProtocol(string $protocol)\n * @method static BasePDF setTree(\\Dompdf\\Frame\\FrameTree $tree)\n */\n class Pdf {\n /**\n * Get the DomPDF instance\n *\n * @static\n */\n public static function getDomPDF()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->getDomPDF();\n }\n\n /**\n * Show or hide warnings\n *\n * @static\n */\n public static function setWarnings($warnings)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setWarnings($warnings);\n }\n\n /**\n * Load a HTML string\n *\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadHTML($string, $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadHTML($string, $encoding);\n }\n\n /**\n * Load a HTML file\n *\n * @static\n */\n public static function loadFile($file)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadFile($file);\n }\n\n /**\n * Add metadata info\n *\n * @param array<string, string> $info\n * @static\n */\n public static function addInfo($info)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->addInfo($info);\n }\n\n /**\n * Load a View and convert to HTML\n *\n * @param array<string, mixed> $data\n * @param array<string, mixed> $mergeData\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadView($view, $data = [], $mergeData = [], $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadView($view, $data, $mergeData, $encoding);\n }\n\n /**\n * Set/Change an option (or array of options) in Dompdf\n *\n * @param array<string, mixed>|string $attribute\n * @param null|mixed $value\n * @static\n */\n public static function setOption($attribute, $value = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOption($attribute, $value);\n }\n\n /**\n * Replace all the Options from DomPDF\n *\n * @param array<string, mixed> $options\n * @static\n */\n public static function setOptions($options, $mergeWithDefaults = false)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOptions($options, $mergeWithDefaults);\n }\n\n /**\n * Output the PDF as a string.\n * \n * The options parameter controls the output. Accepted options are:\n * \n * 'compress' = > 1 or 0 - apply content stream compression, this is\n * on (1) by default\n *\n * @param array<string, int> $options\n * @return string The rendered PDF as string\n * @static\n */\n public static function output($options = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->output($options);\n }\n\n /**\n * Save the PDF to a file\n *\n * @static\n */\n public static function save($filename, $disk = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->save($filename, $disk);\n }\n\n /**\n * Make the PDF downloadable by the user\n *\n * @static\n */\n public static function download($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->download($filename);\n }\n\n /**\n * Return a response with the PDF to show in the browser\n *\n * @static\n */\n public static function stream($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->stream($filename);\n }\n\n /**\n * Render the PDF\n *\n * @static\n */\n public static function render()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->render();\n }\n\n /**\n * @param array<string> $pc\n * @static\n */\n public static function setEncryption($password, $ownerpassword = '', $pc = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setEncryption($password, $ownerpassword, $pc);\n }\n\n }\n /**\n * @method static BasePDF setBaseHost(string $baseHost)\n * @method static BasePDF setBasePath(string $basePath)\n * @method static BasePDF setCanvas(\\Dompdf\\Canvas $canvas)\n * @method static BasePDF setCallbacks(array<string, mixed> $callbacks)\n * @method static BasePDF setCss(\\Dompdf\\Css\\Stylesheet $css)\n * @method static BasePDF setDefaultView(string $defaultView, array<string, mixed> $options)\n * @method static BasePDF setDom(\\DOMDocument $dom)\n * @method static BasePDF setFontMetrics(\\Dompdf\\FontMetrics $fontMetrics)\n * @method static BasePDF setHttpContext(resource|array<string, mixed> $httpContext)\n * @method static BasePDF setPaper(string|float[] $paper, string $orientation = 'portrait')\n * @method static BasePDF setProtocol(string $protocol)\n * @method static BasePDF setTree(\\Dompdf\\Frame\\FrameTree $tree)\n */\n class Pdf {\n /**\n * Get the DomPDF instance\n *\n * @static\n */\n public static function getDomPDF()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->getDomPDF();\n }\n\n /**\n * Show or hide warnings\n *\n * @static\n */\n public static function setWarnings($warnings)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setWarnings($warnings);\n }\n\n /**\n * Load a HTML string\n *\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadHTML($string, $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadHTML($string, $encoding);\n }\n\n /**\n * Load a HTML file\n *\n * @static\n */\n public static function loadFile($file)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadFile($file);\n }\n\n /**\n * Add metadata info\n *\n * @param array<string, string> $info\n * @static\n */\n public static function addInfo($info)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->addInfo($info);\n }\n\n /**\n * Load a View and convert to HTML\n *\n * @param array<string, mixed> $data\n * @param array<string, mixed> $mergeData\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadView($view, $data = [], $mergeData = [], $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadView($view, $data, $mergeData, $encoding);\n }\n\n /**\n * Set/Change an option (or array of options) in Dompdf\n *\n * @param array<string, mixed>|string $attribute\n * @param null|mixed $value\n * @static\n */\n public static function setOption($attribute, $value = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOption($attribute, $value);\n }\n\n /**\n * Replace all the Options from DomPDF\n *\n * @param array<string, mixed> $options\n * @static\n */\n public static function setOptions($options, $mergeWithDefaults = false)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOptions($options, $mergeWithDefaults);\n }\n\n /**\n * Output the PDF as a string.\n * \n * The options parameter controls the output. Accepted options are:\n * \n * 'compress' = > 1 or 0 - apply content stream compression, this is\n * on (1) by default\n *\n * @param array<string, int> $options\n * @return string The rendered PDF as string\n * @static\n */\n public static function output($options = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->output($options);\n }\n\n /**\n * Save the PDF to a file\n *\n * @static\n */\n public static function save($filename, $disk = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->save($filename, $disk);\n }\n\n /**\n * Make the PDF downloadable by the user\n *\n * @static\n */\n public static function download($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->download($filename);\n }\n\n /**\n * Return a response with the PDF to show in the browser\n *\n * @static\n */\n public static function stream($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->stream($filename);\n }\n\n /**\n * Render the PDF\n *\n * @static\n */\n public static function render()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->render();\n }\n\n /**\n * @param array<string> $pc\n * @static\n */\n public static function setEncryption($password, $ownerpassword = '', $pc = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setEncryption($password, $ownerpassword, $pc);\n }\n\n }\n }\n\nnamespace ChaseConey\\LaravelDatadogHelper {\n /**\n * @see LaravelDatadogHelper\n * @see \\Datadog\\DogStatsd\n */\n class Datadog extends \\DataDog\\DogStatsd {\n /**\n * @static\n */\n public static function send($data, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->send($data, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Log timing information\n *\n * @param string $stat The metric to in log timing info for.\n * @param float $time The elapsed time (ms) to log\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function timing($stat, $time, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->timing($stat, $time, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * A convenient alias for the timing function when used with micro-timing\n *\n * @param string $stat The metric name\n * @param float $time The elapsed time to log, IN SECONDS\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function microtiming($stat, $time, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->microtiming($stat, $time, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Gauge\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function gauge($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->gauge($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Histogram\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function histogram($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->histogram($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Distribution\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function distribution($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->distribution($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Set\n *\n * @param string $stat The metric\n * @param string|float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function set($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->set($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Increments one or more stats counters\n *\n * @param string|array $stats The metric(s) to increment.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param int $value the amount to increment by (default 1)\n * @return void\n * @static\n */\n public static function increment($stats, $sampleRate = 1.0, $tags = null, $value = 1, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->increment($stats, $sampleRate, $tags, $value, $cardinality);\n }\n\n /**\n * Decrements one or more stats counters.\n *\n * @param string|array $stats The metric(s) to decrement.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param int $value the amount to decrement by (default -1)\n * @return void\n * @static\n */\n public static function decrement($stats, $sampleRate = 1.0, $tags = null, $value = -1, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->decrement($stats, $sampleRate, $tags, $value, $cardinality);\n }\n\n /**\n * Updates one or more stats counters by arbitrary amounts.\n *\n * @param string|array $stats The metric(s) to update. Should be either a string or array of metrics.\n * @param int $delta The amount to increment/decrement each metric by.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function updateStats($stats, $delta = 1, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->updateStats($stats, $delta, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * @deprecated service_check will be removed in future versions in favor of serviceCheck\n * \n * Send a custom service check status over UDP\n * @param string $name service check name\n * @param int $status service check status code (see OK, WARNING,...)\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param string $hostname hostname to associate with this service check status\n * @param string $message message to associate with this service check status\n * @param int $timestamp timestamp for the service check status (defaults to now)\n * @return void\n * @static\n */\n public static function service_check($name, $status, $tags = null, $hostname = null, $message = null, $timestamp = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->service_check($name, $status, $tags, $hostname, $message, $timestamp);\n }\n\n /**\n * Send a custom service check status over UDP\n *\n * @param string $name service check name\n * @param int $status service check status code (see OK, WARNING,...)\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param string $hostname hostname to associate with this service check status\n * @param string $message message to associate with this service check status\n * @param int $timestamp timestamp for the service check status (defaults to now)\n * @return void\n * @static\n */\n public static function serviceCheck($name, $status, $tags = null, $hostname = null, $message = null, $timestamp = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->serviceCheck($name, $status, $tags, $hostname, $message, $timestamp);\n }\n\n /**\n * @static\n */\n public static function report($message)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->report($message);\n }\n\n /**\n * @throws \\Exception|\\Throwable\n * @static\n */\n public static function flush($message)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->flush($message);\n }\n\n /**\n * Formats $vals array into event for submission to Datadog via UDP\n *\n * @param array $vals Optional values of the event. See\n * https://docs.datadoghq.com/api/?lang=bash#post-an-event for the valid keys\n * @return bool\n * @static\n */\n public static function event($title, $vals = [])\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->event($title, $vals);\n }\n\n /**\n * @static\n */\n public static function setMetricsPrefix($metricsPrefix)\n {\n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->setMetricsPrefix($metricsPrefix);\n }\n\n }\n }\n\nnamespace Spatie\\LaravelIgnition\\Facades {\n /**\n * @see \\Spatie\\FlareClient\\Flare\n */\n class Flare {\n /**\n * @static\n */\n public static function make($apiKey = null, $contextDetector = null)\n {\n return \\Spatie\\FlareClient\\Flare::make($apiKey, $contextDetector);\n }\n\n /**\n * @static\n */\n public static function setApiToken($apiToken)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setApiToken($apiToken);\n }\n\n /**\n * @static\n */\n public static function apiTokenSet()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->apiTokenSet();\n }\n\n /**\n * @static\n */\n public static function setBaseUrl($baseUrl)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setBaseUrl($baseUrl);\n }\n\n /**\n * @static\n */\n public static function setStage($stage)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setStage($stage);\n }\n\n /**\n * @static\n */\n public static function sendReportsImmediately()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->sendReportsImmediately();\n }\n\n /**\n * @static\n */\n public static function determineVersionUsing($determineVersionCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->determineVersionUsing($determineVersionCallable);\n }\n\n /**\n * @static\n */\n public static function reportErrorLevels($reportErrorLevels)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportErrorLevels($reportErrorLevels);\n }\n\n /**\n * @static\n */\n public static function filterExceptionsUsing($filterExceptionsCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->filterExceptionsUsing($filterExceptionsCallable);\n }\n\n /**\n * @static\n */\n public static function filterReportsUsing($filterReportsCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->filterReportsUsing($filterReportsCallable);\n }\n\n /**\n * @param array<class-string<ArgumentReducer>|ArgumentReducer>|\\Spatie\\Backtrace\\Arguments\\ArgumentReducers|null $argumentReducers\n * @static\n */\n public static function argumentReducers($argumentReducers)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->argumentReducers($argumentReducers);\n }\n\n /**\n * @static\n */\n public static function withStackFrameArguments($withStackFrameArguments = true, $forcePHPIniSetting = false)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->withStackFrameArguments($withStackFrameArguments, $forcePHPIniSetting);\n }\n\n /**\n * @param class-string $exceptionClass\n * @static\n */\n public static function overrideGrouping($exceptionClass, $type = 'exception_message_and_class')\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->overrideGrouping($exceptionClass, $type);\n }\n\n /**\n * @static\n */\n public static function version()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->version();\n }\n\n /**\n * @return array<int, FlareMiddleware|class-string<FlareMiddleware>>\n * @static\n */\n public static function getMiddleware()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getMiddleware();\n }\n\n /**\n * @static\n */\n public static function setContextProviderDetector($contextDetector)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setContextProviderDetector($contextDetector);\n }\n\n /**\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * @static\n */\n public static function registerFlareHandlers()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerFlareHandlers();\n }\n\n /**\n * @static\n */\n public static function registerExceptionHandler()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerExceptionHandler();\n }\n\n /**\n * @static\n */\n public static function registerErrorHandler($errorLevels = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerErrorHandler($errorLevels);\n }\n\n /**\n * @param \\Spatie\\FlareClient\\FlareMiddleware\\FlareMiddleware|array<FlareMiddleware>|class-string<FlareMiddleware>|callable $middleware\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function registerMiddleware($middleware)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerMiddleware($middleware);\n }\n\n /**\n * @return array<int,FlareMiddleware|class-string<FlareMiddleware>>\n * @static\n */\n public static function getMiddlewares()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getMiddlewares();\n }\n\n /**\n * @param string $name\n * @param string $messageLevel\n * @param array<int, mixed> $metaData\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function glow($name, $messageLevel = 'info', $metaData = [])\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->glow($name, $messageLevel, $metaData);\n }\n\n /**\n * @static\n */\n public static function handleException($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->handleException($throwable);\n }\n\n /**\n * @return mixed\n * @static\n */\n public static function handleError($code, $message, $file = '', $line = 0)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->handleError($code, $message, $file, $line);\n }\n\n /**\n * @static\n */\n public static function applicationPath($applicationPath)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->applicationPath($applicationPath);\n }\n\n /**\n * @static\n */\n public static function report($throwable, $callback = null, $report = null, $handled = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->report($throwable, $callback, $report, $handled);\n }\n\n /**\n * @static\n */\n public static function reportHandled($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportHandled($throwable);\n }\n\n /**\n * @static\n */\n public static function reportMessage($message, $logLevel, $callback = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportMessage($message, $logLevel, $callback);\n }\n\n /**\n * @static\n */\n public static function sendTestReport($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->sendTestReport($throwable);\n }\n\n /**\n * @static\n */\n public static function reset()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reset();\n }\n\n /**\n * @static\n */\n public static function anonymizeIp()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->anonymizeIp();\n }\n\n /**\n * @param array<int, string> $fieldNames\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function censorRequestBodyFields($fieldNames)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->censorRequestBodyFields($fieldNames);\n }\n\n /**\n * @static\n */\n public static function createReport($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->createReport($throwable);\n }\n\n /**\n * @static\n */\n public static function createReportFromMessage($message, $logLevel)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->createReportFromMessage($message, $logLevel);\n }\n\n /**\n * @static\n */\n public static function stage($stage)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->stage($stage);\n }\n\n /**\n * @static\n */\n public static function messageLevel($messageLevel)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->messageLevel($messageLevel);\n }\n\n /**\n * @param string $groupName\n * @param mixed $default\n * @return array<int, mixed>\n * @static\n */\n public static function getGroup($groupName = 'context', $default = [])\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getGroup($groupName, $default);\n }\n\n /**\n * @static\n */\n public static function context($key, $value)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->context($key, $value);\n }\n\n /**\n * @param string $groupName\n * @param array<string, mixed> $properties\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function group($groupName, $properties)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->group($groupName, $properties);\n }\n\n }\n }\n\nnamespace Vinkla\\Hashids\\Facades {\n /**\n * @method static string encode(mixed ...$numbers)\n * @method static array decode(string $hash)\n * @method static string encodeHex(string $str)\n * @method static string decodeHex(string $hash)\n */\n class Hashids extends \\GrahamCampbell\\Manager\\AbstractManager {\n /**\n * @static\n */\n public static function getFactory()\n {\n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getFactory();\n }\n\n /**\n * Get a connection instance.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return object\n * @static\n */\n public static function connection($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Reconnect to the given connection.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return object\n * @static\n */\n public static function reconnect($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->reconnect($name);\n }\n\n /**\n * Disconnect from the given connection.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function disconnect($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->disconnect($name);\n }\n\n /**\n * Get the configuration for a connection.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return array\n * @static\n */\n public static function getConnectionConfig($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConnectionConfig($name);\n }\n\n /**\n * Get the default connection name.\n *\n * @return string\n * @static\n */\n public static function getDefaultConnection()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getDefaultConnection();\n }\n\n /**\n * Set the default connection name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultConnection($name)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->setDefaultConnection($name);\n }\n\n /**\n * Register an extension connection resolver.\n *\n * @param string $name\n * @param callable $resolver\n * @return void\n * @static\n */\n public static function extend($name, $resolver)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->extend($name, $resolver);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array<string,object>\n * @static\n */\n public static function getConnections()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConnections();\n }\n\n /**\n * Get the config instance.\n *\n * @return \\Illuminate\\Contracts\\Config\\Repository\n * @static\n */\n public static function getConfig()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConfig();\n }\n\n }\n }\n\nnamespace Illuminate\\Support {\n /**\n * @template TKey of array-key\n * @template-covariant TValue\n * @implements \\ArrayAccess<TKey, TValue>\n * @implements \\Illuminate\\Support\\Enumerable<TKey, TValue>\n */\n class Collection {\n /**\n * @see \\Barryvdh\\Debugbar\\ServiceProvider::register()\n * @static\n */\n public static function debug()\n {\n return \\Illuminate\\Support\\Collection::debug();\n }\n\n /**\n * @see \\Spatie\\Fractal\\FractalServiceProvider::packageBooted()\n * @param mixed $transformer\n * @static\n */\n public static function transformWith($transformer)\n {\n return \\Illuminate\\Support\\Collection::transformWith($transformer);\n }\n\n }\n }\n\nnamespace Illuminate\\Http {\n /**\n */\n class Request extends \\Symfony\\Component\\HttpFoundation\\Request {\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validate($rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validate($rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param string $errorBag\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validateWithBag($errorBag, $rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validateWithBag($errorBag, $rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignature($absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignature($absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @static\n */\n public static function hasValidRelativeSignature()\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignature();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignatureWhileIgnoring($ignoreQuery, $absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @static\n */\n public static function hasValidRelativeSignatureWhileIgnoring($ignoreQuery = [])\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignatureWhileIgnoring($ignoreQuery);\n }\n\n }\n }\n\nnamespace Illuminate\\Testing {\n /**\n * @template TResponse of \\Symfony\\Component\\HttpFoundation\\Response\n * @mixin \\Illuminate\\Http\\Response\n */\n class TestResponse {\n /**\n * @see \\JMac\\Testing\\AdditionalAssertionsServiceProvider::register()\n * @param array $structure\n * @static\n */\n public static function assertJsonTypedStructure($structure)\n {\n return \\Illuminate\\Testing\\TestResponse::assertJsonTypedStructure($structure);\n }\n\n /**\n * @see \\JMac\\Testing\\AdditionalAssertionsServiceProvider::register()\n * @param string $key\n * @static\n */\n public static function assertViewHasNull($key)\n {\n return \\Illuminate\\Testing\\TestResponse::assertViewHasNull($key);\n }\n\n }\n }\n\nnamespace Illuminate\\Database\\Schema {\n /**\n */\n class Blueprint {\n /**\n * @see \\Kalnoy\\Nestedset\\NestedSetServiceProvider::register()\n * @static\n */\n public static function nestedSet()\n {\n return \\Illuminate\\Database\\Schema\\Blueprint::nestedSet();\n }\n\n /**\n * @see \\Kalnoy\\Nestedset\\NestedSetServiceProvider::register()\n * @static\n */\n public static function dropNestedSet()\n {\n return \\Illuminate\\Database\\Schema\\Blueprint::dropNestedSet();\n }\n\n }\n }\n\nnamespace Illuminate\\Validation {\n /**\n */\n class Rule {\n /**\n * @see \\Propaganistas\\LaravelPhone\\PhoneServiceProvider::registerValidator()\n * @static\n */\n public static function phone()\n {\n return \\Illuminate\\Validation\\Rule::phone();\n }\n\n }\n }\n\nnamespace Illuminate\\Console\\Scheduling {\n /**\n */\n class Event {\n /**\n * @see \\Sentry\\Laravel\\Features\\ConsoleSchedulingIntegration::register()\n * @param string|null $monitorSlug\n * @param int|null $checkInMargin\n * @param int|null $maxRuntime\n * @param bool $updateMonitorConfig\n * @param int|null $failureIssueThreshold\n * @param int|null $recoveryThreshold\n * @static\n */\n public static function sentryMonitor($monitorSlug = null, $checkInMargin = null, $maxRuntime = null, $updateMonitorConfig = true, $failureIssueThreshold = null, $recoveryThreshold = null)\n {\n return \\Illuminate\\Console\\Scheduling\\Event::sentryMonitor($monitorSlug, $checkInMargin, $maxRuntime, $updateMonitorConfig, $failureIssueThreshold, $recoveryThreshold);\n }\n\n }\n }\n\nnamespace Illuminate\\Http\\Client {\n /**\n * @mixin \\Illuminate\\Http\\Client\\PendingRequest\n */\n class Factory {\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatApi();\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatAnalyticsApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatAnalyticsApi();\n }\n\n }\n }\n\nnamespace Illuminate\\Routing {\n /**\n * @mixin \\Illuminate\\Routing\\RouteRegistrar\n */\n class Router {\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::auth()\n * @param mixed $options\n * @static\n */\n public static function auth($options = [])\n {\n return \\Illuminate\\Routing\\Router::auth($options);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::resetPassword()\n * @static\n */\n public static function resetPassword()\n {\n return \\Illuminate\\Routing\\Router::resetPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::confirmPassword()\n * @static\n */\n public static function confirmPassword()\n {\n return \\Illuminate\\Routing\\Router::confirmPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::emailVerification()\n * @static\n */\n public static function emailVerification()\n {\n return \\Illuminate\\Routing\\Router::emailVerification();\n }\n\n }\n /**\n */\n class ResponseFactory {\n /**\n * @see \\Jiminny\\Providers\\ResponseMacroServiceProvider::boot()\n * @param mixed $data\n * @param mixed $status\n * @param array $headers\n * @param mixed $options\n * @static\n */\n public static function twiml($data = null, $status = 200, $headers = [], $options = 0)\n {\n return \\Illuminate\\Routing\\ResponseFactory::twiml($data, $status, $headers, $options);\n }\n\n }\n }\n\nnamespace Illuminate\\Database\\Eloquent {\n /**\n * @template TKey of array-key\n * @template TModel of \\Illuminate\\Database\\Eloquent\\Model\n * @extends \\Illuminate\\Support\\Collection<TKey, TModel>\n */\n class Collection extends \\Illuminate\\Support\\Collection {\n }\n }\n\n\nnamespace {\n class App extends \\Illuminate\\Support\\Facades\\App {}\n class Arr extends \\Illuminate\\Support\\Arr {}\n class Artisan extends \\Illuminate\\Support\\Facades\\Artisan {}\n class Auth extends \\Illuminate\\Support\\Facades\\Auth {}\n class Benchmark extends \\Illuminate\\Support\\Benchmark {}\n class Blade extends \\Illuminate\\Support\\Facades\\Blade {}\n class Broadcast extends \\Illuminate\\Support\\Facades\\Broadcast {}\n class Bus extends \\Illuminate\\Support\\Facades\\Bus {}\n class Cache extends \\Illuminate\\Support\\Facades\\Cache {}\n class Concurrency extends \\Illuminate\\Support\\Facades\\Concurrency {}\n class Config extends \\Illuminate\\Support\\Facades\\Config {}\n class Context extends \\Illuminate\\Support\\Facades\\Context {}\n class Cookie extends \\Illuminate\\Support\\Facades\\Cookie {}\n class Crypt extends \\Illuminate\\Support\\Facades\\Crypt {}\n class DB extends \\Illuminate\\Support\\Facades\\DB {}\n\n /**\n * @template TCollection of static\n * @template TModel of static\n * @template TValue of static\n * @template TValue of static\n */\n class Eloquent extends \\Illuminate\\Database\\Eloquent\\Model { /**\n * Create and return an un-saved model instance.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function make($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->make($attributes);\n }\n\n /**\n * Register a new global scope.\n *\n * @param string $identifier\n * @param \\Illuminate\\Database\\Eloquent\\Scope|\\Closure $scope\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withGlobalScope($identifier, $scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withGlobalScope($identifier, $scope);\n }\n\n /**\n * Remove a registered global scope.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Scope|string $scope\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScope($scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScope($scope);\n }\n\n /**\n * Remove all or passed registered global scopes.\n *\n * @param array|null $scopes\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScopes($scopes = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScopes($scopes);\n }\n\n /**\n * Remove all global scopes except the given scopes.\n *\n * @param array $scopes\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScopesExcept($scopes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScopesExcept($scopes);\n }\n\n /**\n * Get an array of global scopes that were removed from the query.\n *\n * @return array\n * @static\n */\n public static function removedScopes()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->removedScopes();\n }\n\n /**\n * Add a where clause on the primary key to the query.\n *\n * @param mixed $id\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereKey($id)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereKey($id);\n }\n\n /**\n * Add a where clause on the primary key to the query.\n *\n * @param mixed $id\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereKeyNot($id)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereKeyNot($id);\n }\n\n /**\n * Add a basic where clause to the query.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function where($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->where($column, $operator, $value, $boolean);\n }\n\n /**\n * Add a basic where clause to the query, and return the first result.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return TModel|null\n * @static\n */\n public static function firstWhere($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstWhere($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|array|string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhere($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhere($column, $operator, $value);\n }\n\n /**\n * Add a basic \"where not\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNot($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereNot($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where not\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|array|string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNot($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereNot($column, $operator, $value);\n }\n\n /**\n * Add an \"order by\" clause for a timestamp to the query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function latest($column = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->latest($column);\n }\n\n /**\n * Add an \"order by\" clause for a timestamp to the query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function oldest($column = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->oldest($column);\n }\n\n /**\n * Create a collection of models from plain arrays.\n *\n * @param array $items\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function hydrate($items)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hydrate($items);\n }\n\n /**\n * Insert into the database after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return bool\n * @static\n */\n public static function fillAndInsert($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsert($values);\n }\n\n /**\n * Insert (ignoring errors) into the database after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return int\n * @static\n */\n public static function fillAndInsertOrIgnore($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsertOrIgnore($values);\n }\n\n /**\n * Insert a record into the database and get its ID after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<string, mixed> $values\n * @return int\n * @static\n */\n public static function fillAndInsertGetId($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsertGetId($values);\n }\n\n /**\n * Enrich the given values by merging in the model's default attributes, adding timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return array<int, array<string, mixed>>\n * @static\n */\n public static function fillForInsert($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillForInsert($values);\n }\n\n /**\n * Create a collection of models from a raw query.\n *\n * @param string $query\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function fromQuery($query, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fromQuery($query, $bindings);\n }\n\n /**\n * Find a model by its primary key.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel|null)\n * @static\n */\n public static function find($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->find($id, $columns);\n }\n\n /**\n * Find a sole model by its primary key.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function findSole($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findSole($id, $columns);\n }\n\n /**\n * Find multiple models by their primary keys.\n *\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $ids\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function findMany($ids, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findMany($ids, $columns);\n }\n\n /**\n * Find a model by its primary key or throw an exception.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel)\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function findOrFail($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOrFail($id, $columns);\n }\n\n /**\n * Find a model by its primary key or return fresh model instance.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel)\n * @static\n */\n public static function findOrNew($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOrNew($id, $columns);\n }\n\n /**\n * Find a model by its primary key or call a callback.\n *\n * @template TValue\n * @param mixed $id\n * @param (\\Closure(): TValue)|list<string>|string $columns\n * @param (\\Closure(): TValue)|null $callback\n * @return ( $id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>)\n * ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * : TModel|TValue\n * )\n * @static\n */\n public static function findOr($id, $columns = [], $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOr($id, $columns, $callback);\n }\n\n /**\n * Get the first record matching the attributes or instantiate it.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function firstOrNew($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrNew($attributes, $values);\n }\n\n /**\n * Get the first record matching the attributes. If the record is not found, create it.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function firstOrCreate($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrCreate($attributes, $values);\n }\n\n /**\n * Attempt to create the record. If a unique constraint violation occurs, attempt to find the matching record.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function createOrFirst($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->createOrFirst($attributes, $values);\n }\n\n /**\n * Create or update a record matching the attributes, and fill it with values.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function updateOrCreate($attributes, $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->updateOrCreate($attributes, $values);\n }\n\n /**\n * Create a record matching the attributes, or increment the existing record.\n *\n * @param array $attributes\n * @param string $column\n * @param int|float $default\n * @param int|float $step\n * @param array $extra\n * @return TModel\n * @static\n */\n public static function incrementOrCreate($attributes, $column = 'count', $default = 1, $step = 1, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->incrementOrCreate($attributes, $column, $default, $step, $extra);\n }\n\n /**\n * Execute the query and get the first result or throw an exception.\n *\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function firstOrFail($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrFail($columns);\n }\n\n /**\n * Execute the query and get the first result or call a callback.\n *\n * @template TValue\n * @param (\\Closure(): TValue)|list<string> $columns\n * @param (\\Closure(): TValue)|null $callback\n * @return TModel|TValue\n * @static\n */\n public static function firstOr($columns = [], $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOr($columns, $callback);\n }\n\n /**\n * Execute the query and get the first result if it's the sole matching record.\n *\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function sole($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->sole($columns);\n }\n\n /**\n * Get a single column's value from the first result of a query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @static\n */\n public static function value($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->value($column);\n }\n\n /**\n * Get a single column's value from the first result of a query if it's the sole matching record.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function soleValue($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->soleValue($column);\n }\n\n /**\n * Get a single column's value from the first result of the query or throw an exception.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function valueOrFail($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->valueOrFail($column);\n }\n\n /**\n * Execute the query as a \"select\" statement.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function get($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->get($columns);\n }\n\n /**\n * Get the hydrated models without eager loading.\n *\n * @param array|string $columns\n * @return array<int, TModel>\n * @static\n */\n public static function getModels($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getModels($columns);\n }\n\n /**\n * Eager load the relationships for the models.\n *\n * @param array<int, TModel> $models\n * @return array<int, TModel>\n * @static\n */\n public static function eagerLoadRelations($models)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->eagerLoadRelations($models);\n }\n\n /**\n * Register a closure to be invoked after the query is executed.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function afterQuery($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->afterQuery($callback);\n }\n\n /**\n * Invoke the \"after query\" modification callbacks.\n *\n * @param mixed $result\n * @return mixed\n * @static\n */\n public static function applyAfterQueryCallbacks($result)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->applyAfterQueryCallbacks($result);\n }\n\n /**\n * Get a lazy collection for the given query.\n *\n * @return \\Illuminate\\Support\\LazyCollection<int, TModel>\n * @static\n */\n public static function cursor()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->cursor();\n }\n\n /**\n * Get a collection with the values of a given column.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param string|null $key\n * @return \\Illuminate\\Support\\Collection<array-key, mixed>\n * @static\n */\n public static function pluck($column, $key = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->pluck($column, $key);\n }\n\n /**\n * Paginate the given query.\n *\n * @param int|null|\\Closure $perPage\n * @param array|string $columns\n * @param string $pageName\n * @param int|null $page\n * @param \\Closure|int|null $total\n * @return \\Illuminate\\Pagination\\LengthAwarePaginator\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function paginate($perPage = null, $columns = [], $pageName = 'page', $page = null, $total = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->paginate($perPage, $columns, $pageName, $page, $total);\n }\n\n /**\n * Paginate the given query into a simple paginator.\n *\n * @param int|null $perPage\n * @param array|string $columns\n * @param string $pageName\n * @param int|null $page\n * @return \\Illuminate\\Contracts\\Pagination\\Paginator\n * @static\n */\n public static function simplePaginate($perPage = null, $columns = [], $pageName = 'page', $page = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->simplePaginate($perPage, $columns, $pageName, $page);\n }\n\n /**\n * Paginate the given query into a cursor paginator.\n *\n * @param int|null $perPage\n * @param array|string $columns\n * @param string $cursorName\n * @param \\Illuminate\\Pagination\\Cursor|string|null $cursor\n * @return \\Illuminate\\Contracts\\Pagination\\CursorPaginator\n * @static\n */\n public static function cursorPaginate($perPage = null, $columns = [], $cursorName = 'cursor', $cursor = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->cursorPaginate($perPage, $columns, $cursorName, $cursor);\n }\n\n /**\n * Save a new model and return the instance.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function create($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->create($attributes);\n }\n\n /**\n * Save a new model and return the instance without raising model events.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function createQuietly($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->createQuietly($attributes);\n }\n\n /**\n * Save a new model and return the instance. Allow mass-assignment.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function forceCreate($attributes)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->forceCreate($attributes);\n }\n\n /**\n * Save a new model instance with mass assignment without raising model events.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function forceCreateQuietly($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->forceCreateQuietly($attributes);\n }\n\n /**\n * Insert new records or update the existing ones.\n *\n * @param array $values\n * @param array|string $uniqueBy\n * @param array|null $update\n * @return int\n * @static\n */\n public static function upsert($values, $uniqueBy, $update = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->upsert($values, $uniqueBy, $update);\n }\n\n /**\n * Register a replacement for the default delete function.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function onDelete($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n $instance->onDelete($callback);\n }\n\n /**\n * Call the given local model scopes.\n *\n * @param array|string $scopes\n * @return static|mixed\n * @static\n */\n public static function scopes($scopes)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->scopes($scopes);\n }\n\n /**\n * Apply the scopes to the Eloquent builder instance and return it.\n *\n * @return static\n * @static\n */\n public static function applyScopes()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->applyScopes();\n }\n\n /**\n * Prevent the specified relations from being eager loaded.\n *\n * @param mixed $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function without($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->without($relations);\n }\n\n /**\n * Set the relationships that should be eager loaded while removing any previously added eager loading specifications.\n *\n * @param array<array-key, array|(\\Closure(\\Illuminate\\Database\\Eloquent\\Relations\\Relation<*,*,*>): mixed)|string>|string $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withOnly($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withOnly($relations);\n }\n\n /**\n * Create a new instance of the model being queried.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function newModelInstance($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->newModelInstance($attributes);\n }\n\n /**\n * Specify attributes that should be added to any new models created by this builder.\n * \n * The given key / value pairs will also be added as where conditions to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|array|string $attributes\n * @param mixed $value\n * @param bool $asConditions\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAttributes($attributes, $value = null, $asConditions = true)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAttributes($attributes, $value, $asConditions);\n }\n\n /**\n * Apply query-time casts to the model instance.\n *\n * @param array $casts\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withCasts($casts)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withCasts($casts);\n }\n\n /**\n * Execute the given Closure within a transaction savepoint if needed.\n *\n * @template TModelValue\n * @param \\Closure(): TModelValue $scope\n * @return TModelValue\n * @static\n */\n public static function withSavepointIfNeeded($scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withSavepointIfNeeded($scope);\n }\n\n /**\n * Get the underlying query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function getQuery()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getQuery();\n }\n\n /**\n * Set the underlying query builder instance.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function setQuery($query)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setQuery($query);\n }\n\n /**\n * Get a base query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function toBase()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->toBase();\n }\n\n /**\n * Get the relationships being eagerly loaded.\n *\n * @return array\n * @static\n */\n public static function getEagerLoads()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getEagerLoads();\n }\n\n /**\n * Set the relationships being eagerly loaded.\n *\n * @param array $eagerLoad\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function setEagerLoads($eagerLoad)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setEagerLoads($eagerLoad);\n }\n\n /**\n * Indicate that the given relationships should not be eagerly loaded.\n *\n * @param array $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutEagerLoad($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutEagerLoad($relations);\n }\n\n /**\n * Flush the relationships being eagerly loaded.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutEagerLoads()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutEagerLoads();\n }\n\n /**\n * Get the \"limit\" value from the query or null if it's not set.\n *\n * @return mixed\n * @static\n */\n public static function getLimit()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getLimit();\n }\n\n /**\n * Get the \"offset\" value from the query or null if it's not set.\n *\n * @return mixed\n * @static\n */\n public static function getOffset()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getOffset();\n }\n\n /**\n * Get the model instance being queried.\n *\n * @return TModel\n * @static\n */\n public static function getModel()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getModel();\n }\n\n /**\n * Set a model instance for the model being queried.\n *\n * @template TModelNew of \\Illuminate\\Database\\Eloquent\\Model\n * @param TModelNew $model\n * @return static<TModelNew>\n * @static\n */\n public static function setModel($model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setModel($model);\n }\n\n /**\n * Get the given macro by name.\n *\n * @param string $name\n * @return \\Closure\n * @static\n */\n public static function getMacro($name)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getMacro($name);\n }\n\n /**\n * Checks if a macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hasMacro($name);\n }\n\n /**\n * Get the given global macro by name.\n *\n * @param string $name\n * @return \\Closure\n * @static\n */\n public static function getGlobalMacro($name)\n {\n return \\Illuminate\\Database\\Eloquent\\Builder::getGlobalMacro($name);\n }\n\n /**\n * Checks if a global macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasGlobalMacro($name)\n {\n return \\Illuminate\\Database\\Eloquent\\Builder::hasGlobalMacro($name);\n }\n\n /**\n * Clone the Eloquent query builder.\n *\n * @return static\n * @static\n */\n public static function clone()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->clone();\n }\n\n /**\n * Register a closure to be invoked on a clone.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function onClone($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->onClone($callback);\n }\n\n /**\n * Chunk the results of the query.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @return bool\n * @static\n */\n public static function chunk($count, $callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunk($count, $callback);\n }\n\n /**\n * Run a map over each item while chunking.\n *\n * @template TReturn\n * @param callable(TValue): TReturn $callback\n * @param int $count\n * @return \\Illuminate\\Support\\Collection<int, TReturn>\n * @static\n */\n public static function chunkMap($callback, $count = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkMap($callback, $count);\n }\n\n /**\n * Execute a callback over each item while chunking.\n *\n * @param callable(TValue, int): mixed $callback\n * @param int $count\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function each($callback, $count = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->each($callback, $count);\n }\n\n /**\n * Chunk the results of a query by comparing IDs.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function chunkById($count, $callback, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkById($count, $callback, $column, $alias);\n }\n\n /**\n * Chunk the results of a query by comparing IDs in descending order.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function chunkByIdDesc($count, $callback, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkByIdDesc($count, $callback, $column, $alias);\n }\n\n /**\n * Chunk the results of a query by comparing IDs in a given order.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @param bool $descending\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function orderedChunkById($count, $callback, $column = null, $alias = null, $descending = false)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orderedChunkById($count, $callback, $column, $alias, $descending);\n }\n\n /**\n * Execute a callback over each item while chunking by ID.\n *\n * @param callable(TValue, int): mixed $callback\n * @param int $count\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function eachById($callback, $count = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->eachById($callback, $count, $column, $alias);\n }\n\n /**\n * Query lazily, by chunks of the given size.\n *\n * @param int $chunkSize\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazy($chunkSize = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazy($chunkSize);\n }\n\n /**\n * Query lazily, by chunking the results of a query by comparing IDs.\n *\n * @param int $chunkSize\n * @param string|null $column\n * @param string|null $alias\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazyById($chunkSize = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazyById($chunkSize, $column, $alias);\n }\n\n /**\n * Query lazily, by chunking the results of a query by comparing IDs in descending order.\n *\n * @param int $chunkSize\n * @param string|null $column\n * @param string|null $alias\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazyByIdDesc($chunkSize = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazyByIdDesc($chunkSize, $column, $alias);\n }\n\n /**\n * Execute the query and get the first result.\n *\n * @param array|string $columns\n * @return TValue|null\n * @static\n */\n public static function first($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->first($columns);\n }\n\n /**\n * Execute the query and get the first result if it's the sole matching record.\n *\n * @param array|string $columns\n * @return TValue\n * @throws \\Illuminate\\Database\\RecordsNotFoundException\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function baseSole($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->baseSole($columns);\n }\n\n /**\n * Pass the query to a given callback and then return it.\n *\n * @param callable($this): mixed $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function tap($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->tap($callback);\n }\n\n /**\n * Pass the query to a given callback and return the result.\n *\n * @template TReturn\n * @param (callable($this): TReturn) $callback\n * @return (TReturn is null|void ? $this : TReturn)\n * @static\n */\n public static function pipe($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->pipe($callback);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Add a relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param string $operator\n * @param int $count\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function has($relation, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->has($relation, $operator, $count, $boolean, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHas($relation, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orHas($relation, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function doesntHave($relation, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->doesntHave($relation, $boolean, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orDoesntHave($relation)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orDoesntHave($relation);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n * \n * Also load the relationship with the same condition.\n *\n * @param string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withWhereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withWhereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHave($relation, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHave($relation, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHave($relation, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHave($relation, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $operator\n * @param int $count\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function hasMorph($relation, $types, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hasMorph($relation, $types, $operator, $count, $boolean, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHasMorph($relation, $types, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orHasMorph($relation, $types, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function doesntHaveMorph($relation, $types, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->doesntHaveMorph($relation, $types, $boolean, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param string|array<int, string> $types\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orDoesntHaveMorph($relation, $types)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orDoesntHaveMorph($relation, $types);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereHasMorph($relation, $types, $callback, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereHasMorph($relation, $types, $callback, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHaveMorph($relation, $types, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHaveMorph($relation, $types, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHaveMorph($relation, $types, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHaveMorph($relation, $types, $callback);\n }\n\n /**\n * Add a basic where clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a basic where clause to a relationship query and eager-load the relationship with the same conditions.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @param \\Closure|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withWhereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withWhereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add an \"or where\" clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a basic count / exists condition to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHaveRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHaveRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add an \"or where\" clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHaveRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHaveRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with a where clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with an \"or where\" clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with a doesn't have clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphDoesntHaveRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphDoesntHaveRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with an \"or doesn't have\" clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphDoesntHaveRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphDoesntHaveRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a morph-to relationship condition to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string|null $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphedTo($relation, $model, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphedTo($relation, $model, $boolean);\n }\n\n /**\n * Add a not morph-to relationship condition to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotMorphedTo($relation, $model, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereNotMorphedTo($relation, $model, $boolean);\n }\n\n /**\n * Add a morph-to relationship condition to the query with an \"or where\" clause.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string|null $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphedTo($relation, $model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphedTo($relation, $model);\n }\n\n /**\n * Add a not morph-to relationship condition to the query with an \"or where\" clause.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotMorphedTo($relation, $model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereNotMorphedTo($relation, $model);\n }\n\n /**\n * Add a \"belongs to\" relationship where clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model|\\Illuminate\\Database\\Eloquent\\Collection<int, \\Illuminate\\Database\\Eloquent\\Model> $related\n * @param string|null $relationshipName\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\Illuminate\\Database\\Eloquent\\RelationNotFoundException\n * @static\n */\n public static function whereBelongsTo($related, $relationshipName = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereBelongsTo($related, $relationshipName, $boolean);\n }\n\n /**\n * Add a \"BelongsTo\" relationship with an \"or where\" clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model $related\n * @param string|null $relationshipName\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function orWhereBelongsTo($related, $relationshipName = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereBelongsTo($related, $relationshipName);\n }\n\n /**\n * Add a \"belongs to many\" relationship where clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model|\\Illuminate\\Database\\Eloquent\\Collection<int, \\Illuminate\\Database\\Eloquent\\Model> $related\n * @param string|null $relationshipName\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\Illuminate\\Database\\Eloquent\\RelationNotFoundException\n * @static\n */\n public static function whereAttachedTo($related, $relationshipName = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereAttachedTo($related, $relationshipName, $boolean);\n }\n\n /**\n * Add a \"belongs to many\" relationship with an \"or where\" clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model $related\n * @param string|null $relationshipName\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function orWhereAttachedTo($related, $relationshipName = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereAttachedTo($related, $relationshipName);\n }\n\n /**\n * Add subselect queries to include an aggregate value for a relationship.\n *\n * @param mixed $relations\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string|null $function\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAggregate($relations, $column, $function = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAggregate($relations, $column, $function);\n }\n\n /**\n * Add subselect queries to count the relations.\n *\n * @param mixed $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withCount($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withCount($relations);\n }\n\n /**\n * Add subselect queries to include the max of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withMax($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withMax($relation, $column);\n }\n\n /**\n * Add subselect queries to include the min of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withMin($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withMin($relation, $column);\n }\n\n /**\n * Add subselect queries to include the sum of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withSum($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withSum($relation, $column);\n }\n\n /**\n * Add subselect queries to include the average of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAvg($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAvg($relation, $column);\n }\n\n /**\n * Add subselect queries to include the existence of related models.\n *\n * @param string|array $relation\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withExists($relation)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withExists($relation);\n }\n\n /**\n * Merge the where constraints from another query to the current query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Builder<*> $from\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeConstraintsFrom($from)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->mergeConstraintsFrom($from);\n }\n\n /**\n * Set the columns to be selected.\n *\n * @param mixed $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function select($columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->select($columns);\n }\n\n /**\n * Add a subselect expression to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function selectSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->selectSub($query, $as);\n }\n\n /**\n * Add a new \"raw\" select expression to the query.\n *\n * @param string $expression\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function selectRaw($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->selectRaw($expression, $bindings);\n }\n\n /**\n * Makes \"from\" fetch from a subquery.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function fromSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->fromSub($query, $as);\n }\n\n /**\n * Add a raw from clause to the query.\n *\n * @param string $expression\n * @param mixed $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function fromRaw($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->fromRaw($expression, $bindings);\n }\n\n /**\n * Add a new select column to the query.\n *\n * @param mixed $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addSelect($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addSelect($column);\n }\n\n /**\n * Force the query to only return distinct results.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function distinct()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->distinct();\n }\n\n /**\n * Set the table which the query is targeting.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param string|null $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function from($table, $as = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->from($table, $as);\n }\n\n /**\n * Add an index hint to suggest a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function useIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->useIndex($index);\n }\n\n /**\n * Add an index hint to force a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forceIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forceIndex($index);\n }\n\n /**\n * Add an index hint to ignore a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function ignoreIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->ignoreIndex($index);\n }\n\n /**\n * Add a join clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @param string $type\n * @param bool $where\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->join($table, $first, $operator, $second, $type, $where);\n }\n\n /**\n * Add a \"join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $second\n * @param string $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function joinWhere($table, $first, $operator, $second, $type = 'inner')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinWhere($table, $first, $operator, $second, $type);\n }\n\n /**\n * Add a subquery join clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @param string $type\n * @param bool $where\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function joinSub($query, $as, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinSub($query, $as, $first, $operator, $second, $type, $where);\n }\n\n /**\n * Add a lateral join clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function joinLateral($query, $as, $type = 'inner')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinLateral($query, $as, $type);\n }\n\n /**\n * Add a lateral left join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinLateral($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinLateral($query, $as);\n }\n\n /**\n * Add a left join to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoin($table, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a \"join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinWhere($table, $first, $operator, $second)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinWhere($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery left join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinSub($query, $as, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinSub($query, $as, $first, $operator, $second);\n }\n\n /**\n * Add a right join to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoin($table, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a \"right join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoinWhere($table, $first, $operator, $second)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoinWhere($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery right join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoinSub($query, $as, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoinSub($query, $as, $first, $operator, $second);\n }\n\n /**\n * Add a \"cross join\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function crossJoin($table, $first = null, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->crossJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery cross join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function crossJoinSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->crossJoinSub($query, $as);\n }\n\n /**\n * Merge an array of where clauses and bindings.\n *\n * @param array $wheres\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeWheres($wheres, $bindings)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->mergeWheres($wheres, $bindings);\n }\n\n /**\n * Prepare the value and operator for a where clause.\n *\n * @param string $value\n * @param string $operator\n * @param bool $useDefault\n * @return array\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function prepareValueAndOperator($value, $operator, $useDefault = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->prepareValueAndOperator($value, $operator, $useDefault);\n }\n\n /**\n * Add a \"where\" clause comparing two columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|array $first\n * @param string|null $operator\n * @param string|null $second\n * @param string|null $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereColumn($first, $operator = null, $second = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereColumn($first, $operator, $second, $boolean);\n }\n\n /**\n * Add an \"or where\" clause comparing two columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|array $first\n * @param string|null $operator\n * @param string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereColumn($first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereColumn($first, $operator, $second);\n }\n\n /**\n * Add a raw where clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $sql\n * @param mixed $bindings\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereRaw($sql, $bindings = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereRaw($sql, $bindings, $boolean);\n }\n\n /**\n * Add a raw or where clause to the query.\n *\n * @param string $sql\n * @param mixed $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereRaw($sql, $bindings);\n }\n\n /**\n * Add a \"where like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereLike($column, $value, $caseSensitive = false, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereLike($column, $value, $caseSensitive, $boolean, $not);\n }\n\n /**\n * Add an \"or where like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereLike($column, $value, $caseSensitive = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereLike($column, $value, $caseSensitive);\n }\n\n /**\n * Add a \"where not like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotLike($column, $value, $caseSensitive = false, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotLike($column, $value, $caseSensitive, $boolean);\n }\n\n /**\n * Add an \"or where not like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotLike($column, $value, $caseSensitive = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotLike($column, $value, $caseSensitive);\n }\n\n /**\n * Add a \"where in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIn($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIn($column, $values, $boolean, $not);\n }\n\n /**\n * Add an \"or where in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIn($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIn($column, $values);\n }\n\n /**\n * Add a \"where not in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotIn($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotIn($column, $values, $boolean);\n }\n\n /**\n * Add an \"or where not in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotIn($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotIn($column, $values);\n }\n\n /**\n * Add a \"where in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIntegerInRaw($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIntegerInRaw($column, $values, $boolean, $not);\n }\n\n /**\n * Add an \"or where in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIntegerInRaw($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIntegerInRaw($column, $values);\n }\n\n /**\n * Add a \"where not in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIntegerNotInRaw($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIntegerNotInRaw($column, $values, $boolean);\n }\n\n /**\n * Add an \"or where not in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIntegerNotInRaw($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIntegerNotInRaw($column, $values);\n }\n\n /**\n * Add a \"where null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNull($columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNull($columns, $boolean, $not);\n }\n\n /**\n * Add an \"or where null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNull($column);\n }\n\n /**\n * Add a \"where not null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotNull($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotNull($columns, $boolean);\n }\n\n /**\n * Add a where between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBetween($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBetween($column, $values, $boolean, $not);\n }\n\n /**\n * Add a where between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBetweenColumns($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBetweenColumns($column, $values, $boolean, $not);\n }\n\n /**\n * Add an or where between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBetween($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBetween($column, $values);\n }\n\n /**\n * Add an or where between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBetweenColumns($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBetweenColumns($column, $values);\n }\n\n /**\n * Add a where not between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotBetween($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotBetween($column, $values, $boolean);\n }\n\n /**\n * Add a where not between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotBetweenColumns($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotBetweenColumns($column, $values, $boolean);\n }\n\n /**\n * Add an or where not between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotBetween($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotBetween($column, $values);\n }\n\n /**\n * Add an or where not between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotBetweenColumns($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotBetweenColumns($column, $values);\n }\n\n /**\n * Add a where between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereValueBetween($value, $columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereValueBetween($value, $columns, $boolean, $not);\n }\n\n /**\n * Add an or where between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereValueBetween($value, $columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereValueBetween($value, $columns);\n }\n\n /**\n * Add a where not between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereValueNotBetween($value, $columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereValueNotBetween($value, $columns, $boolean);\n }\n\n /**\n * Add an or where not between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereValueNotBetween($value, $columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereValueNotBetween($value, $columns);\n }\n\n /**\n * Add an \"or where not null\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotNull($column);\n }\n\n /**\n * Add a \"where date\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDate($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereDate($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where date\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDate($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereDate($column, $operator, $value);\n }\n\n /**\n * Add a \"where time\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTime($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTime($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where time\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTime($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTime($column, $operator, $value);\n }\n\n /**\n * Add a \"where day\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDay($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereDay($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where day\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDay($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereDay($column, $operator, $value);\n }\n\n /**\n * Add a \"where month\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMonth($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereMonth($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where month\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMonth($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereMonth($column, $operator, $value);\n }\n\n /**\n * Add a \"where year\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereYear($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereYear($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where year\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereYear($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereYear($column, $operator, $value);\n }\n\n /**\n * Add a nested where statement to the query.\n *\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNested($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNested($callback, $boolean);\n }\n\n /**\n * Create a new query instance for nested where condition.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function forNestedWhere()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forNestedWhere();\n }\n\n /**\n * Add another query builder as a nested where to the query builder.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addNestedWhereQuery($query, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addNestedWhereQuery($query, $boolean);\n }\n\n /**\n * Add an exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereExists($callback, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereExists($callback, $boolean, $not);\n }\n\n /**\n * Add an or exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereExists($callback, $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereExists($callback, $not);\n }\n\n /**\n * Add a where not exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotExists($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotExists($callback, $boolean);\n }\n\n /**\n * Add a where not exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotExists($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotExists($callback);\n }\n\n /**\n * Add an exists clause to the query.\n *\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addWhereExistsQuery($query, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addWhereExistsQuery($query, $boolean, $not);\n }\n\n /**\n * Adds a where condition using row values.\n *\n * @param array $columns\n * @param string $operator\n * @param array $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function whereRowValues($columns, $operator, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereRowValues($columns, $operator, $values, $boolean);\n }\n\n /**\n * Adds an or where condition using row values.\n *\n * @param array $columns\n * @param string $operator\n * @param array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRowValues($columns, $operator, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereRowValues($columns, $operator, $values);\n }\n\n /**\n * Add a \"where JSON contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonContains($column, $value, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonContains($column, $value, $boolean, $not);\n }\n\n /**\n * Add an \"or where JSON contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonContains($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonContains($column, $value);\n }\n\n /**\n * Add a \"where JSON not contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntContain($column, $value, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntContain($column, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON not contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntContain($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntContain($column, $value);\n }\n\n /**\n * Add a \"where JSON overlaps\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonOverlaps($column, $value, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonOverlaps($column, $value, $boolean, $not);\n }\n\n /**\n * Add an \"or where JSON overlaps\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonOverlaps($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonOverlaps($column, $value);\n }\n\n /**\n * Add a \"where JSON not overlap\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntOverlap($column, $value, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntOverlap($column, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON not overlap\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntOverlap($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntOverlap($column, $value);\n }\n\n /**\n * Add a clause that determines if a JSON path exists to the query.\n *\n * @param string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonContainsKey($column, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonContainsKey($column, $boolean, $not);\n }\n\n /**\n * Add an \"or\" clause that determines if a JSON path exists to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonContainsKey($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonContainsKey($column);\n }\n\n /**\n * Add a clause that determines if a JSON path does not exist to the query.\n *\n * @param string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntContainKey($column, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntContainKey($column, $boolean);\n }\n\n /**\n * Add an \"or\" clause that determines if a JSON path does not exist to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntContainKey($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntContainKey($column);\n }\n\n /**\n * Add a \"where JSON length\" clause to the query.\n *\n * @param string $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonLength($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonLength($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON length\" clause to the query.\n *\n * @param string $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonLength($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonLength($column, $operator, $value);\n }\n\n /**\n * Handles dynamic \"where\" clauses to the query.\n *\n * @param string $method\n * @param array $parameters\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dynamicWhere($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dynamicWhere($method, $parameters);\n }\n\n /**\n * Add a \"where fulltext\" clause to the query.\n *\n * @param string|string[] $columns\n * @param string $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereFullText($columns, $value, $options = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereFullText($columns, $value, $options, $boolean);\n }\n\n /**\n * Add a \"or where fulltext\" clause to the query.\n *\n * @param string|string[] $columns\n * @param string $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereFullText($columns, $value, $options = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereFullText($columns, $value, $options);\n }\n\n /**\n * Add a \"where\" clause to the query for multiple columns with \"and\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAll($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAll($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query for multiple columns with \"and\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAll($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAll($columns, $operator, $value);\n }\n\n /**\n * Add a \"where\" clause to the query for multiple columns with \"or\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAny($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAny($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query for multiple columns with \"or\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAny($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAny($columns, $operator, $value);\n }\n\n /**\n * Add a \"where not\" clause to the query for multiple columns where none of the conditions should be true.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNone($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNone($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where not\" clause to the query for multiple columns where none of the conditions should be true.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNone($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNone($columns, $operator, $value);\n }\n\n /**\n * Add a \"group by\" clause to the query.\n *\n * @param array|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $groups\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupBy(...$groups)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupBy(...$groups);\n }\n\n /**\n * Add a raw groupBy clause to the query.\n *\n * @param string $sql\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupByRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupByRaw($sql, $bindings);\n }\n\n /**\n * Add a \"having\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\Closure|string $column\n * @param \\DateTimeInterface|string|int|float|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\DateTimeInterface|string|int|float|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function having($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->having($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or having\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\Closure|string $column\n * @param \\DateTimeInterface|string|int|float|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\DateTimeInterface|string|int|float|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHaving($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHaving($column, $operator, $value);\n }\n\n /**\n * Add a nested having statement to the query.\n *\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNested($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNested($callback, $boolean);\n }\n\n /**\n * Add another query builder as a nested having to the query builder.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addNestedHavingQuery($query, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addNestedHavingQuery($query, $boolean);\n }\n\n /**\n * Add a \"having null\" clause to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNull($columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNull($columns, $boolean, $not);\n }\n\n /**\n * Add an \"or having null\" clause to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingNull($column);\n }\n\n /**\n * Add a \"having not null\" clause to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNotNull($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNotNull($columns, $boolean);\n }\n\n /**\n * Add an \"or having not null\" clause to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingNotNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingNotNull($column);\n }\n\n /**\n * Add a \"having between \" clause to the query.\n *\n * @param string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingBetween($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingBetween($column, $values, $boolean, $not);\n }\n\n /**\n * Add a raw having clause to the query.\n *\n * @param string $sql\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingRaw($sql, $bindings = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingRaw($sql, $bindings, $boolean);\n }\n\n /**\n * Add a raw or having clause to the query.\n *\n * @param string $sql\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingRaw($sql, $bindings);\n }\n\n /**\n * Add an \"order by\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $direction\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function orderBy($column, $direction = 'asc')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderBy($column, $direction);\n }\n\n /**\n * Add a descending \"order by\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orderByDesc($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderByDesc($column);\n }\n\n /**\n * Put the query's results in random order.\n *\n * @param string|int $seed\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function inRandomOrder($seed = '')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->inRandomOrder($seed);\n }\n\n /**\n * Add a raw \"order by\" clause to the query.\n *\n * @param string $sql\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orderByRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderByRaw($sql, $bindings);\n }\n\n /**\n * Alias to set the \"offset\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function skip($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->skip($value);\n }\n\n /**\n * Set the \"offset\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function offset($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->offset($value);\n }\n\n /**\n * Alias to set the \"limit\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function take($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->take($value);\n }\n\n /**\n * Set the \"limit\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function limit($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->limit($value);\n }\n\n /**\n * Add a \"group limit\" clause to the query.\n *\n * @param int $value\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupLimit($value, $column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupLimit($value, $column);\n }\n\n /**\n * Set the limit and offset for a given page.\n *\n * @param int $page\n * @param int $perPage\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPage($page, $perPage = 15)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPage($page, $perPage);\n }\n\n /**\n * Constrain the query to the previous \"page\" of results before a given ID.\n *\n * @param int $perPage\n * @param int|null $lastId\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPageBeforeId($perPage = 15, $lastId = 0, $column = 'id')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPageBeforeId($perPage, $lastId, $column);\n }\n\n /**\n * Constrain the query to the next \"page\" of results after a given ID.\n *\n * @param int $perPage\n * @param int|null $lastId\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPageAfterId($perPage = 15, $lastId = 0, $column = 'id')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPageAfterId($perPage, $lastId, $column);\n }\n\n /**\n * Remove all existing orders and optionally add a new order.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $column\n * @param string $direction\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function reorder($column = null, $direction = 'asc')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->reorder($column, $direction);\n }\n\n /**\n * Add descending \"reorder\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function reorderDesc($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->reorderDesc($column);\n }\n\n /**\n * Add a union statement to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $query\n * @param bool $all\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function union($query, $all = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->union($query, $all);\n }\n\n /**\n * Add a union all statement to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function unionAll($query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->unionAll($query);\n }\n\n /**\n * Lock the selected rows in the table.\n *\n * @param string|bool $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function lock($value = true)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->lock($value);\n }\n\n /**\n * Lock the selected rows in the table for updating.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function lockForUpdate()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->lockForUpdate();\n }\n\n /**\n * Share lock the selected rows in the table.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function sharedLock()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->sharedLock();\n }\n\n /**\n * Register a closure to be invoked before the query is executed.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function beforeQuery($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->beforeQuery($callback);\n }\n\n /**\n * Invoke the \"before query\" modification callbacks.\n *\n * @return void\n * @static\n */\n public static function applyBeforeQueryCallbacks()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n $instance->applyBeforeQueryCallbacks();\n }\n\n /**\n * Get the SQL representation of the query.\n *\n * @return string\n * @static\n */\n public static function toSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->toSql();\n }\n\n /**\n * Get the raw SQL representation of the query with embedded bindings.\n *\n * @return string\n * @static\n */\n public static function toRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->toRawSql();\n }\n\n /**\n * Get a single expression value from the first result of a query.\n *\n * @return mixed\n * @static\n */\n public static function rawValue($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rawValue($expression, $bindings);\n }\n\n /**\n * Get the count of the total records for the paginator.\n *\n * @param array<string|\\Illuminate\\Contracts\\Database\\Query\\Expression> $columns\n * @return int<0, max>\n * @static\n */\n public static function getCountForPagination($columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getCountForPagination($columns);\n }\n\n /**\n * Concatenate values of a given column as a string.\n *\n * @param string $column\n * @param string $glue\n * @return string\n * @static\n */\n public static function implode($column, $glue = '')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->implode($column, $glue);\n }\n\n /**\n * Determine if any rows exist for the current query.\n *\n * @return bool\n * @static\n */\n public static function exists()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->exists();\n }\n\n /**\n * Determine if no rows exist for the current query.\n *\n * @return bool\n * @static\n */\n public static function doesntExist()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->doesntExist();\n }\n\n /**\n * Execute the given callback if no rows exist for the current query.\n *\n * @return mixed\n * @static\n */\n public static function existsOr($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->existsOr($callback);\n }\n\n /**\n * Execute the given callback if rows exist for the current query.\n *\n * @return mixed\n * @static\n */\n public static function doesntExistOr($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->doesntExistOr($callback);\n }\n\n /**\n * Retrieve the \"count\" result of the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $columns\n * @return int<0, max>\n * @static\n */\n public static function count($columns = '*')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->count($columns);\n }\n\n /**\n * Retrieve the minimum value of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function min($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->min($column);\n }\n\n /**\n * Retrieve the maximum value of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function max($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->max($column);\n }\n\n /**\n * Retrieve the sum of the values of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function sum($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->sum($column);\n }\n\n /**\n * Retrieve the average of the values of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function avg($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->avg($column);\n }\n\n /**\n * Alias for the \"avg\" method.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function average($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->average($column);\n }\n\n /**\n * Execute an aggregate function on the database.\n *\n * @param string $function\n * @param array $columns\n * @return mixed\n * @static\n */\n public static function aggregate($function, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->aggregate($function, $columns);\n }\n\n /**\n * Execute a numeric aggregate function on the database.\n *\n * @param string $function\n * @param array $columns\n * @return float|int\n * @static\n */\n public static function numericAggregate($function, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->numericAggregate($function, $columns);\n }\n\n /**\n * Insert new records into the database.\n *\n * @return bool\n * @static\n */\n public static function insert($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insert($values);\n }\n\n /**\n * Insert new records into the database while ignoring errors.\n *\n * @return int<0, max>\n * @static\n */\n public static function insertOrIgnore($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertOrIgnore($values);\n }\n\n /**\n * Insert a new record and get the value of the primary key.\n *\n * @param string|null $sequence\n * @return int\n * @static\n */\n public static function insertGetId($values, $sequence = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertGetId($values, $sequence);\n }\n\n /**\n * Insert new records into the table using a subquery.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return int\n * @static\n */\n public static function insertUsing($columns, $query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertUsing($columns, $query);\n }\n\n /**\n * Insert new records into the table using a subquery while ignoring errors.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return int\n * @static\n */\n public static function insertOrIgnoreUsing($columns, $query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertOrIgnoreUsing($columns, $query);\n }\n\n /**\n * Update records in a PostgreSQL database using the update from syntax.\n *\n * @return int\n * @static\n */\n public static function updateFrom($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->updateFrom($values);\n }\n\n /**\n * Insert or update a record matching the attributes, and fill it with values.\n *\n * @return bool\n * @static\n */\n public static function updateOrInsert($attributes, $values = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->updateOrInsert($attributes, $values);\n }\n\n /**\n * Increment the given column's values by the given amounts.\n *\n * @param array<string, float|int|numeric-string> $columns\n * @param array<string, mixed> $extra\n * @return int<0, max>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function incrementEach($columns, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->incrementEach($columns, $extra);\n }\n\n /**\n * Decrement the given column's values by the given amounts.\n *\n * @param array<string, float|int|numeric-string> $columns\n * @param array<string, mixed> $extra\n * @return int<0, max>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function decrementEach($columns, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->decrementEach($columns, $extra);\n }\n\n /**\n * Run a truncate statement on the table.\n *\n * @return void\n * @static\n */\n public static function truncate()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n $instance->truncate();\n }\n\n /**\n * Get all of the query builder's columns in a text-only array with all expressions evaluated.\n *\n * @return list<string>\n * @static\n */\n public static function getColumns()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getColumns();\n }\n\n /**\n * Create a raw database expression.\n *\n * @param mixed $value\n * @return \\Illuminate\\Contracts\\Database\\Query\\Expression\n * @static\n */\n public static function raw($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->raw($value);\n }\n\n /**\n * Get the current query value bindings in a flattened array.\n *\n * @return list<mixed>\n * @static\n */\n public static function getBindings()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getBindings();\n }\n\n /**\n * Get the raw array of bindings.\n *\n * @return \\Illuminate\\Database\\Query\\array{ select: list<mixed>,\n * from: list<mixed>,\n * join: list<mixed>,\n * where: list<mixed>,\n * groupBy: list<mixed>,\n * having: list<mixed>,\n * order: list<mixed>,\n * union: list<mixed>,\n * unionOrder: list<mixed>,\n * }\n * @static\n */\n public static function getRawBindings()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getRawBindings();\n }\n\n /**\n * Set the bindings on the query builder.\n *\n * @param list<mixed> $bindings\n * @param \"select\"|\"from\"|\"join\"|\"where\"|\"groupBy\"|\"having\"|\"order\"|\"union\"|\"unionOrder\" $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function setBindings($bindings, $type = 'where')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->setBindings($bindings, $type);\n }\n\n /**\n * Add a binding to the query.\n *\n * @param mixed $value\n * @param \"select\"|\"from\"|\"join\"|\"where\"|\"groupBy\"|\"having\"|\"order\"|\"union\"|\"unionOrder\" $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function addBinding($value, $type = 'where')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addBinding($value, $type);\n }\n\n /**\n * Cast the given binding value.\n *\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function castBinding($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->castBinding($value);\n }\n\n /**\n * Merge an array of bindings into our bindings.\n *\n * @param self $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeBindings($query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->mergeBindings($query);\n }\n\n /**\n * Remove all of the expressions from a list of bindings.\n *\n * @param array<mixed> $bindings\n * @return list<mixed>\n * @static\n */\n public static function cleanBindings($bindings)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cleanBindings($bindings);\n }\n\n /**\n * Get the database query processor instance.\n *\n * @return \\Illuminate\\Database\\Query\\Processors\\Processor\n * @static\n */\n public static function getProcessor()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getProcessor();\n }\n\n /**\n * Get the query grammar instance.\n *\n * @return \\Illuminate\\Database\\Query\\Grammars\\Grammar\n * @static\n */\n public static function getGrammar()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getGrammar();\n }\n\n /**\n * Use the \"write\" PDO connection when executing the query.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function useWritePdo()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->useWritePdo();\n }\n\n /**\n * Clone the query without the given properties.\n *\n * @return static\n * @static\n */\n public static function cloneWithout($properties)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cloneWithout($properties);\n }\n\n /**\n * Clone the query without the given bindings.\n *\n * @return static\n * @static\n */\n public static function cloneWithoutBindings($except)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cloneWithoutBindings($except);\n }\n\n /**\n * Dump the current SQL and bindings.\n *\n * @param mixed $args\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dump(...$args)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dump(...$args);\n }\n\n /**\n * Dump the raw current SQL with embedded bindings.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dumpRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dumpRawSql();\n }\n\n /**\n * Die and dump the current SQL and bindings.\n *\n * @return never\n * @static\n */\n public static function dd()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dd();\n }\n\n /**\n * Die and dump the current SQL with embedded bindings.\n *\n * @return never\n * @static\n */\n public static function ddRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->ddRawSql();\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function wherePast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->wherePast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNowOrPast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNowOrPast($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the past to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWherePast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWherePast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNowOrPast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNowOrPast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the future to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereFuture($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the future or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNowOrFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNowOrFuture($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the future to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereFuture($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the future or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNowOrFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNowOrFuture($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereToday($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereToday($columns, $boolean);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is before today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBeforeToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBeforeToday($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today or before to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTodayOrBefore($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTodayOrBefore($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is after today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAfterToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAfterToday($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today or after to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTodayOrAfter($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTodayOrAfter($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is before today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBeforeToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBeforeToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today or before to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTodayOrBefore($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTodayOrBefore($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is after today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAfterToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAfterToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today or after to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTodayOrAfter($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTodayOrAfter($columns);\n }\n\n /**\n * Explains the query.\n *\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function explain()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->explain();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Database\\Query\\Builder::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Database\\Query\\Builder::mixin($mixin, $replace);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Database\\Query\\Builder::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n}\n class Event extends \\Illuminate\\Support\\Facades\\Event {}\n class File extends \\Illuminate\\Support\\Facades\\File {}\n class Gate extends \\Illuminate\\Support\\Facades\\Gate {}\n class Hash extends \\Illuminate\\Support\\Facades\\Hash {}\n class Http extends \\Illuminate\\Support\\Facades\\Http {}\n class Js extends \\Illuminate\\Support\\Js {}\n class Lang extends \\Illuminate\\Support\\Facades\\Lang {}\n class Log extends \\Illuminate\\Support\\Facades\\Log {}\n class Mail extends \\Illuminate\\Support\\Facades\\Mail {}\n class Notification extends \\Illuminate\\Support\\Facades\\Notification {}\n class Number extends \\Illuminate\\Support\\Number {}\n class Password extends \\Illuminate\\Support\\Facades\\Password {}\n class Process extends \\Illuminate\\Support\\Facades\\Process {}\n class Queue extends \\Illuminate\\Support\\Facades\\Queue {}\n class RateLimiter extends \\Illuminate\\Support\\Facades\\RateLimiter {}\n class Redirect extends \\Illuminate\\Support\\Facades\\Redirect {}\n class Request extends \\Illuminate\\Support\\Facades\\Request {}\n class Response extends \\Illuminate\\Support\\Facades\\Response {}\n class Route extends \\Illuminate\\Support\\Facades\\Route {}\n class Schedule extends \\Illuminate\\Support\\Facades\\Schedule {}\n class Schema extends \\Illuminate\\Support\\Facades\\Schema {}\n class Session extends \\Illuminate\\Support\\Facades\\Session {}\n class Storage extends \\Illuminate\\Support\\Facades\\Storage {}\n class Str extends \\Illuminate\\Support\\Str {}\n class Uri extends \\Illuminate\\Support\\Uri {}\n class URL extends \\Illuminate\\Support\\Facades\\URL {}\n class Validator extends \\Illuminate\\Support\\Facades\\Validator {}\n class View extends \\Illuminate\\Support\\Facades\\View {}\n class Vite extends \\Illuminate\\Support\\Facades\\Vite {}\n class AWS extends \\Aws\\Laravel\\AwsFacade {}\n class Avatar extends \\Laravolt\\Avatar\\Facade {}\n class Fractal extends \\Spatie\\Fractal\\Facades\\Fractal {}\n class Laratrust extends \\Laratrust\\LaratrustFacade {}\n class RedisManager extends \\Illuminate\\Support\\Facades\\Redis {}\n class Sentry extends \\Sentry\\Laravel\\Facade {}\n class Statsd extends \\League\\StatsD\\Laravel5\\Facade\\StatsdFacade {}\n class Debugbar extends \\Barryvdh\\Debugbar\\Facades\\Debugbar {}\n class PDF extends \\Barryvdh\\DomPDF\\Facade\\Pdf {}\n class Pdf extends \\Barryvdh\\DomPDF\\Facade\\Pdf {}\n class Datadog extends \\ChaseConey\\LaravelDatadogHelper\\Datadog {}\n class Flare extends \\Spatie\\LaravelIgnition\\Facades\\Flare {}\n class Hashids extends \\Vinkla\\Hashids\\Facades\\Hashids {}\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4205700763318631190
|
-4461000910654451772
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Built-in Preview
Chrome
Firefox
Safari
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
/* @noinspection ALL */
// @formatter:off
// phpcs:ignoreFile
/**
* A helper file for Laravel, to provide autocomplete information to your IDE
* Generated for Laravel 12.33.0.
*
* This file should not be included in your code, only analyzed by your IDE!
*
* @author Barry vd. Heuvel <[EMAIL]>
* @see [URL_WITH_CREDENTIALS] string
* @static
*/
public static function inferBasePath()
{
return \Illuminate\Foundation\Application::inferBasePath();
}
/**
* Get the version number of the application.
*
* @return string
* @static
*/
public static function version()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->version();
}
/**
* Run the given array of bootstrap classes.
*
* @param string[] $bootstrappers
* @return void
* @static
*/
public static function bootstrapWith($bootstrappers)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->bootstrapWith($bootstrappers);
}
/**
* Register a callback to run after loading the environment.
*
* @param \Closure $callback
* @return void
* @static
*/
public static function afterLoadingEnvironment($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->afterLoadingEnvironment($callback);
}
/**
* Register a callback to run before a bootstrapper.
*
* @param string $bootstrapper
* @param \Closure $callback
* @return void
* @static
*/
public static function beforeBootstrapping($bootstrapper, $callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->beforeBootstrapping($bootstrapper, $callback);
}
/**
* Register a callback to run after a bootstrapper.
*
* @param string $bootstrapper
* @param \Closure $callback
* @return void
* @static
*/
public static function afterBootstrapping($bootstrapper, $callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->afterBootstrapping($bootstrapper, $callback);
}
/**
* Determine if the application has been bootstrapped before.
*
* @return bool
* @static
*/
public static function hasBeenBootstrapped()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasBeenBootstrapped();
}
/**
* Set the base path for the application.
*
* @param string $basePath
* @return \Illuminate\Foundation\Application
* @static
*/
public static function setBasePath($basePath)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->setBasePath($basePath);
}
/**
* Get the path to the application "app" directory.
*
* @param string $path
* @return string
* @static
*/
public static function path($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->path($path);
}
/**
* Set the application directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useAppPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useAppPath($path);
}
/**
* Get the base path of the Laravel installation.
*
* @param string $path
* @return string
* @static
*/
public static function basePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->basePath($path);
}
/**
* Get the path to the bootstrap directory.
*
* @param string $path
* @return string
* @static
*/
public static function bootstrapPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->bootstrapPath($path);
}
/**
* Get the path to the service provider list in the bootstrap directory.
*
* @return string
* @static
*/
public static function getBootstrapProvidersPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getBootstrapProvidersPath();
}
/**
* Set the bootstrap file directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useBootstrapPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useBootstrapPath($path);
}
/**
* Get the path to the application configuration files.
*
* @param string $path
* @return string
* @static
*/
public static function configPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->configPath($path);
}
/**
* Set the configuration directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useConfigPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useConfigPath($path);
}
/**
* Get the path to the database directory.
*
* @param string $path
* @return string
* @static
*/
public static function databasePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->databasePath($path);
}
/**
* Set the database directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useDatabasePath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useDatabasePath($path);
}
/**
* Get the path to the language files.
*
* @param string $path
* @return string
* @static
*/
public static function langPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->langPath($path);
}
/**
* Set the language file directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useLangPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useLangPath($path);
}
/**
* Get the path to the public / web directory.
*
* @param string $path
* @return string
* @static
*/
public static function publicPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->publicPath($path);
}
/**
* Set the public / web directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function usePublicPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->usePublicPath($path);
}
/**
* Get the path to the storage directory.
*
* @param string $path
* @return string
* @static
*/
public static function storagePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->storagePath($path);
}
/**
* Set the storage directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useStoragePath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useStoragePath($path);
}
/**
* Get the path to the resources directory.
*
* @param string $path
* @return string
* @static
*/
public static function resourcePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resourcePath($path);
}
/**
* Get the path to the views directory.
*
* This method returns the first configured path in the array of view paths.
*
* @param string $path
* @return string
* @static
*/
public static function viewPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->viewPath($path);
}
/**
* Join the given paths together.
*
* @param string $basePath
* @param string $path
* @return string
* @static
*/
public static function joinPaths($basePath, $path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->joinPaths($basePath, $path);
}
/**
* Get the path to the environment file directory.
*
* @return string
* @static
*/
public static function environmentPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentPath();
}
/**
* Set the directory for the environment file.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useEnvironmentPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useEnvironmentPath($path);
}
/**
* Set the environment file to be loaded during bootstrapping.
*
* @param string $file
* @return \Illuminate\Foundation\Application
* @static
*/
public static function loadEnvironmentFrom($file)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->loadEnvironmentFrom($file);
}
/**
* Get the environment file the application is using.
*
* @return string
* @static
*/
public static function environmentFile()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentFile();
}
/**
* Get the fully qualified path to the environment file.
*
* @return string
* @static
*/
public static function environmentFilePath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentFilePath();
}
/**
* Get or check the current application environment.
*
* @param string|array $environments
* @return string|bool
* @static
*/
public static function environment(...$environments)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environment(...$environments);
}
/**
* Determine if the application is in the local environment.
*
* @return bool
* @static
*/
public static function isLocal()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isLocal();
}
/**
* Determine if the application is in the production environment.
*
* @return bool
* @static
*/
public static function isProduction()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isProduction();
}
/**
* Detect the application's current environment.
*
* @param \Closure $callback
* @return string
* @static
*/
public static function detectEnvironment($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->detectEnvironment($callback);
}
/**
* Determine if the application is running in the console.
*
* @return bool
* @static
*/
public static function runningInConsole()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningInConsole();
}
/**
* Determine if the application is running any of the given console commands.
*
* @param string|array $commands
* @return bool
* @static
*/
public static function runningConsoleCommand(...$commands)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningConsoleCommand(...$commands);
}
/**
* Determine if the application is running unit tests.
*
* @return bool
* @static
*/
public static function runningUnitTests()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningUnitTests();
}
/**
* Determine if the application is running with debug mode enabled.
*
* @return bool
* @static
*/
public static function hasDebugModeEnabled()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasDebugModeEnabled();
}
/**
* Register a new registered listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function registered($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registered($callback);
}
/**
* Register all of the configured providers.
*
* @return void
* @static
*/
public static function registerConfiguredProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerConfiguredProviders();
}
/**
* Register a service provider with the application.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @param bool $force
* @return \Illuminate\Support\ServiceProvider
* @static
*/
public static function register($provider, $force = false)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->register($provider, $force);
}
/**
* Get the registered service provider instance if it exists.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @return \Illuminate\Support\ServiceProvider|null
* @static
*/
public static function getProvider($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getProvider($provider);
}
/**
* Get the registered service provider instances if any exist.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @return array
* @static
*/
public static function getProviders($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getProviders($provider);
}
/**
* Resolve a service provider instance from the class name.
*
* @param string $provider
* @return \Illuminate\Support\ServiceProvider
* @static
*/
public static function resolveProvider($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resolveProvider($provider);
}
/**
* Load and boot all of the remaining deferred providers.
*
* @return void
* @static
*/
public static function loadDeferredProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->loadDeferredProviders();
}
/**
* Load the provider for a deferred service.
*
* @param string $service
* @return void
* @static
*/
public static function loadDeferredProvider($service)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->loadDeferredProvider($service);
}
/**
* Register a deferred provider and service.
*
* @param string $provider
* @param string|null $service
* @return void
* @static
*/
public static function registerDeferredProvider($provider, $service = null)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerDeferredProvider($provider, $service);
}
/**
* Resolve the given type from the container.
*
* @template TClass of object
* @param string|class-string<TClass> $abstract
* @param array $parameters
* @return ($abstract is class-string<TClass> ? TClass : mixed)
* @throws \Illuminate\Contracts\Container\BindingResolutionException
* @static
*/
public static function make($abstract, $parameters = [])
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->make($abstract, $parameters);
}
/**
* Determine if the given abstract type has been bound.
*
* @param string $abstract
* @return bool
* @static
*/
public static function bound($abstract)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->bound($abstract);
}
/**
* Determine if the application has booted.
*
* @return bool
* @static
*/
public static function isBooted()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isBooted();
}
/**
* Boot the application's service providers.
*
* @return void
* @static
*/
public static function boot()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->boot();
}
/**
* Register a new boot listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function booting($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->booting($callback);
}
/**
* Register a new "booted" listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function booted($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->booted($callback);
}
/**
* {@inheritdoc}
*
* @return \Symfony\Component\HttpFoundation\Response
* @static
*/
public static function handle($request, $type = 1, $catch = true)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->handle($request, $type, $catch);
}
/**
* Handle the incoming HTTP request and send the response to the browser.
*
* @param \Illuminate\Http\Request $request
* @return void
* @static
*/
public static function handleRequest($request)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->handleRequest($request);
}
/**
* Handle the incoming Artisan command.
*
* @param \Symfony\Component\Console\Input\InputInterface $input
* @return int
* @static
*/
public static function handleCommand($input)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->handleCommand($input);
}
/**
* Determine if the framework's base configuration should be merged.
*
* @return bool
* @static
*/
public static function shouldMergeFrameworkConfiguration()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->shouldMergeFrameworkConfiguration();
}
/**
* Indicate that the framework's base configuration should not be merged.
*
* @return \Illuminate\Foundation\Application
* @static
*/
public static function dontMergeFrameworkConfiguration()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->dontMergeFrameworkConfiguration();
}
/**
* Determine if middleware has been disabled for the application.
*
* @return bool
* @static
*/
public static function shouldSkipMiddleware()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->shouldSkipMiddleware();
}
/**
* Get the path to the cached services.php file.
*
* @return string
* @static
*/
public static function getCachedServicesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedServicesPath();
}
/**
* Get the path to the cached packages.php file.
*
* @return string
* @static
*/
public static function getCachedPackagesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedPackagesPath();
}
/**
* Determine if the application configuration is cached.
*
* @return bool
* @static
*/
public static function configurationIsCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->configurationIsCached();
}
/**
* Get the path to the configuration cache file.
*
* @return string
* @static
*/
public static function getCachedConfigPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedConfigPath();
}
/**
* Determine if the application routes are cached.
*
* @return bool
* @static
*/
public static function routesAreCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->routesAreCached();
}
/**
* Get the path to the routes cache file.
*
* @return string
* @static
*/
public static function getCachedRoutesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedRoutesPath();
}
/**
* Determine if the application events are cached.
*
* @return bool
* @static
*/
public static function eventsAreCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->eventsAreCached();
}
/**
* Get the path to the events cache file.
*
* @return string
* @static
*/
public static function getCachedEventsPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedEventsPath();
}
/**
* Add new prefix to list of absolute path prefixes.
*
* @param string $prefix
* @return \Illuminate\Foundation\Application
* @static
*/
public static function addAbsoluteCachePathPrefix($prefix)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->addAbsoluteCachePathPrefix($prefix);
}
/**
* Get an instance of the maintenance mode manager implementation.
*
* @return \Illuminate\Contracts\Foundation\MaintenanceMode
* @static
*/
public static function maintenanceMode()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->maintenanceMode();
}
/**
* Determine if the application is currently down for maintenance.
*
* @return bool
* @static
*/
public static function isDownForMaintenance()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isDownForMaintenance();
}
/**
* Throw an HttpException with the given data.
*
* @param int $code
* @param string $message
* @param array $headers
* @return never
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @static
*/
public static function abort($code, $message = '', $headers = [])
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->abort($code, $message, $headers);
}
/**
* Register a terminating callback with the application.
*
* @param callable|string $callback
* @return \Illuminate\Foundation\Application
* @static
*/
public static function terminating($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->terminating($callback);
}
/**
* Terminate the application.
*
* @return void
* @static
*/
public static function terminate()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->terminate();
}
/**
* Get the service providers that have been loaded.
*
* @return array<string, bool>
* @static
*/
public static function getLoadedProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getLoadedProviders();
}
/**
* Determine if the given service provider is loaded.
*
* @param string $provider
* @return bool
* @static
*/
public static function providerIsLoaded($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->providerIsLoaded($provider);
}
/**
* Get the application's deferred services.
*
* @return array
* @static
*/
public static function getDeferredServices()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getDeferredServices();
}
/**
* Set the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function setDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setDeferredServices($services);
}
/**
* Determine if the given service is a deferred service.
*
* @param string $service
* @return bool
* @static
*/
public static function isDeferredService($service)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isDeferredService($service);
}
/**
* Add an array of services to the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function addDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->addDeferredServices($services);
}
/**
* Remove an array of services from the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function removeDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->removeDeferredServices($services);
}
/**
* Configure the real-time facade namespace.
*
* @param string $namespace
* @return void
* @static
*/
public static function provideFacades($namespace)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->provideFacades($namespace);
}
/**
* Get the current application locale.
*
* @return string
* @static
*/
public static function getLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getLocale();
}
/**
* Get the current application locale.
*
* @return string
* @static
*/
public static function currentLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->currentLocale();
}
/**
* Get the current application fallback locale.
*
* @return string
* @static
*/
public static function getFallbackLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getFallbackLocale();
}
/**
* Set the current application locale.
*
* @param string $locale
* @return void
* @static
*/
public static function setLocale($locale)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setLocale($locale);
}
/**
* Set the current application fallback locale.
*
* @param string $fallbackLocale
* @return void
* @static
*/
public static function setFallbackLocale($fallbackLocale)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setFallbackLocale($fallbackLocale);
}
/**
* Determine if the application locale is the given locale.
*
* @param string $locale
* @return bool
* @static
*/
public static function isLocale($locale)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isLocale($locale);
}
/**
* Register the core class aliases in the container.
*
* @return void
* @static
*/
public static function registerCoreContainerAliases()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerCoreContainerAliases();
}
/**
* Flush the container of all bindings and resolved instances.
*
* @return void
* @static
*/
public static function flush()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->flush();
}
/**
* Get the application namespace.
*
* @return string
* @throws \RuntimeException
* @static
*/
public static function getNamespace()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getNamespace();
}
/**
* Define a contextual binding.
*
* @param array|string $concrete
* @return \Illuminate\Contracts\Container\ContextualBindingBuilder
* @static
*/
public static function when($concrete)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->when($concrete);
}
/**
* Define a contextual binding based on an attribute.
*
* @param string $attribute
* @param \Closure $handler
* @return void
* @static
*/
public static function whenHasAttribute($attribute, $handler)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->whenHasAttribute($attribute, $handler);
}
/**
* Returns true if the container can return an entry for the given identifier.
*
* Returns false otherwise.
*
* `has($id)` returning true does not mean that `get($id)` will not throw an exception.
* It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
*
* @return bool
* @param string $id Identifier of the entry to look for.
* @return bool
* @static
*/
public static function has($id)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->has($id);
}
/**
* Determine if the given abstract type has been resolved.
*
* @param string $abstract
* @return bool
* @static
*/
public static function resolved($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resolved($abstract);
}
/**
* Determine if a given type is shared.
*
* @param string $abstract
* @return bool
* @static
*/
public static function isShared($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isShared($abstract);
}
/**
* Determine if a given string is an alias.
*
* @param string $name
* @return bool
* @static
*/
public static function isAlias($name)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isAlias($name);
}
/**
* Register a binding with the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
* @throws \TypeError
* @throws ReflectionException
* @static
*/
public static function bind($abstract, $concrete = null, $shared = false)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bind($abstract, $concrete, $shared);
}
/**
* Determine if the container has a method binding.
*
* @param string $method
* @return bool
* @static
*/
public static function hasMethodBinding($method)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasMethodBinding($method);
}
/**
* Bind a callback to resolve with Container::call.
*
* @param array|string $method
* @param \Closure $callback
* @return void
* @static
*/
public static function bindMethod($method, $callback)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bindMethod($method, $callback);
}
/**
* Get the method binding for the given method.
*
* @param string $method
* @param mixed $instance
* @return mixed
* @static
*/
public static function callMethodBinding($method, $instance)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->callMethodBinding($method, $instance);
}
/**
* Add a contextual binding to the container.
*
* @param string $concrete
* @param \Closure|string $abstract
* @param \Closure|string $implementation
* @return void
* @static
*/
public static function addContextualBinding($concrete, $abstract, $implementation)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->addContextualBinding($concrete, $abstract, $implementation);
}
/**
* Register a binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
* @static
*/
public static function bindIf($abstract, $concrete = null, $shared = false)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bindIf($abstract, $concrete, $shared);
}
/**
* Register a shared binding in the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function singleton($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->singleton($abstract, $concrete);
}
/**
* Register a shared binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function singletonIf($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->singletonIf($abstract, $concrete);
}
/**
* Register a scoped binding in the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function scoped($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->scoped($abstract, $concrete);
}
/**
* Register a scoped binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function scopedIf($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->scopedIf($abstract, $concrete);
}
/**
* "Extend" an abstract type in the container.
*
* @param string $abstract
* @param \Closure $closure
* @return void
* @throws \InvalidArgumentException
* @static
*/
public static function extend($abstract, $closure)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->extend($abstract, $closure);
}
/**
* Register an existing instance as shared in the container.
*
* @template TInstance of mixed
* @param string $abstract
* @param TInstance $instance
* @return TInstance
* @static
*/
public static function instance($abstract, $instance)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->instance($abstract, $instance);
}
/**
* Assign a set of tags to a given binding.
*
* @param array|string $abstracts
* @param mixed $tags
* @return void
* @static
*/
public static function tag($abstracts, $tags)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->tag($abstracts, $tags);
}
/**
* Resolve all of the bindings for a given tag.
*
* @param string $tag
* @return iterable
* @static
*/
public static function tagged($tag)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->tagged($tag);
}
/**
* Alias a type to a different name.
*
* @param string $abstract
* @param string $alias
* @return void
* @throws \LogicException
* @static
*/
public static function alias($abstract, $alias)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->alias($abstract, $alias);
}
/**
* Bind a new callback to an abstract's rebind event.
*
* @param string $abstract
* @param \Closure $callback
* @return mixed
* @static
*/
public static function rebinding($abstract, $callback)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->rebinding($abstract, $callback);
}
/**
* Refresh an instance on the given target and method.
*
* @param string $abstract
* @param mixed $target
* @param string $method
* @return mixed
* @static
*/
public static function refresh($abstract, $target, $method)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->refresh($abstract, $target, $method);
}
/**
* Wrap the given closure such that its dependencies will be injected when executed.
*
* @param \Closure $callback
* @param array $parameters
* @return \Closure
* @static
*/
public static function wrap($callback, $parameters = [])
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->wrap($callback, $parameters);
}
/**
* Call the given Closure / class@method and inject its dependencies.
*
* @param callable|string $callback
* @param array<string, mixed> $parameters
* @param string|null $defaultMethod
* @return mixed
* @throws \InvalidArgumentException
* @static
*/
public static function call($callback, $parameters = [], $defaultMethod = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->call($callback, $parameters, $defaultMethod);
}
/**
* Get a closure to resolve the given type from the container.
*
* @template TClass of object
* @param string|class-string<TClass> $abstract
* @return ($abstract is class-string<TClass> ? \Closure(): TClass : \Closure(): mixed)
* @static
*/
public static function factory($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->factory($abstract);
}
/**
* An alias function name for make().
*
* @template TClass of object
* @param string|class-string<TClass>|callable $abstract
* @param array $parameters
* @return ($abstract is class-string<TClass> ? TClass : mixed)
* @throws \Illuminate\Contracts\Container\BindingResolutionException
* @static
*/
public static function makeWith($abstract, $parameters = [])
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->makeWith($abstract, $parameters);
}
/**
* {@inheritdoc}
*
* @template TClass of object
* @param string|class-string<TClass> $id
* @return ($id is class-string<TClass> ? TClass : mixed)
* @static
*/
public static function get($id)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16365
|
735
|
11
|
2026-05-11T08:46:33.967966+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489193967_m2.jpg...
|
PhpStorm
|
faVsco.js – _ide_helper.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Built-in Preview
Chrome
Firefox
Safari
Sync Changes
Hide This Notification
Code changed:
Hide
Analyzing…
<?php
/* @noinspection ALL */
// @formatter:off
// phpcs:ignoreFile
/**
* A helper file for Laravel, to provide autocomplete information to your IDE
* Generated for Laravel 12.33.0.
*
* This file should not be included in your code, only analyzed by your IDE!
*
* @author Barry vd. Heuvel <[EMAIL]>
* @see [URL_WITH_CREDENTIALS] string
* @static
*/
public static function inferBasePath()
{
return \Illuminate\Foundation\Application::inferBasePath();
}
/**
* Get the version number of the application.
*
* @return string
* @static
*/
public static function version()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->version();
}
/**
* Run the given array of bootstrap classes.
*
* @param string[] $bootstrappers
* @return void
* @static
*/
public static function bootstrapWith($bootstrappers)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->bootstrapWith($bootstrappers);
}
/**
* Register a callback to run after loading the environment.
*
* @param \Closure $callback
* @return void
* @static
*/
public static function afterLoadingEnvironment($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->afterLoadingEnvironment($callback);
}
/**
* Register a callback to run before a bootstrapper.
*
* @param string $bootstrapper
* @param \Closure $callback
* @return void
* @static
*/
public static function beforeBootstrapping($bootstrapper, $callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->beforeBootstrapping($bootstrapper, $callback);
}
/**
* Register a callback to run after a bootstrapper.
*
* @param string $bootstrapper
* @param \Closure $callback
* @return void
* @static
*/
public static function afterBootstrapping($bootstrapper, $callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->afterBootstrapping($bootstrapper, $callback);
}
/**
* Determine if the application has been bootstrapped before.
*
* @return bool
* @static
*/
public static function hasBeenBootstrapped()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasBeenBootstrapped();
}
/**
* Set the base path for the application.
*
* @param string $basePath
* @return \Illuminate\Foundation\Application
* @static
*/
public static function setBasePath($basePath)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->setBasePath($basePath);
}
/**
* Get the path to the application "app" directory.
*
* @param string $path
* @return string
* @static
*/
public static function path($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->path($path);
}
/**
* Set the application directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useAppPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useAppPath($path);
}
/**
* Get the base path of the Laravel installation.
*
* @param string $path
* @return string
* @static
*/
public static function basePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->basePath($path);
}
/**
* Get the path to the bootstrap directory.
*
* @param string $path
* @return string
* @static
*/
public static function bootstrapPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->bootstrapPath($path);
}
/**
* Get the path to the service provider list in the bootstrap directory.
*
* @return string
* @static
*/
public static function getBootstrapProvidersPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getBootstrapProvidersPath();
}
/**
* Set the bootstrap file directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useBootstrapPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useBootstrapPath($path);
}
/**
* Get the path to the application configuration files.
*
* @param string $path
* @return string
* @static
*/
public static function configPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->configPath($path);
}
/**
* Set the configuration directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useConfigPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useConfigPath($path);
}
/**
* Get the path to the database directory.
*
* @param string $path
* @return string
* @static
*/
public static function databasePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->databasePath($path);
}
/**
* Set the database directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useDatabasePath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useDatabasePath($path);
}
/**
* Get the path to the language files.
*
* @param string $path
* @return string
* @static
*/
public static function langPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->langPath($path);
}
/**
* Set the language file directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useLangPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useLangPath($path);
}
/**
* Get the path to the public / web directory.
*
* @param string $path
* @return string
* @static
*/
public static function publicPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->publicPath($path);
}
/**
* Set the public / web directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function usePublicPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->usePublicPath($path);
}
/**
* Get the path to the storage directory.
*
* @param string $path
* @return string
* @static
*/
public static function storagePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->storagePath($path);
}
/**
* Set the storage directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useStoragePath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useStoragePath($path);
}
/**
* Get the path to the resources directory.
*
* @param string $path
* @return string
* @static
*/
public static function resourcePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resourcePath($path);
}
/**
* Get the path to the views directory.
*
* This method returns the first configured path in the array of view paths.
*
* @param string $path
* @return string
* @static
*/
public static function viewPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->viewPath($path);
}
/**
* Join the given paths together.
*
* @param string $basePath
* @param string $path
* @return string
* @static
*/
public static function joinPaths($basePath, $path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->joinPaths($basePath, $path);
}
/**
* Get the path to the environment file directory.
*
* @return string
* @static
*/
public static function environmentPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentPath();
}
/**
* Set the directory for the environment file.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useEnvironmentPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useEnvironmentPath($path);
}
/**
* Set the environment file to be loaded during bootstrapping.
*
* @param string $file
* @return \Illuminate\Foundation\Application
* @static
*/
public static function loadEnvironmentFrom($file)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->loadEnvironmentFrom($file);
}
/**
* Get the environment file the application is using.
*
* @return string
* @static
*/
public static function environmentFile()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentFile();
}
/**
* Get the fully qualified path to the environment file.
*
* @return string
* @static
*/
public static function environmentFilePath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentFilePath();
}
/**
* Get or check the current application environment.
*
* @param string|array $environments
* @return string|bool
* @static
*/
public static function environment(...$environments)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environment(...$environments);
}
/**
* Determine if the application is in the local environment.
*
* @return bool
* @static
*/
public static function isLocal()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isLocal();
}
/**
* Determine if the application is in the production environment.
*
* @return bool
* @static
*/
public static function isProduction()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isProduction();
}
/**
* Detect the application's current environment.
*
* @param \Closure $callback
* @return string
* @static
*/
public static function detectEnvironment($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->detectEnvironment($callback);
}
/**
* Determine if the application is running in the console.
*
* @return bool
* @static
*/
public static function runningInConsole()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningInConsole();
}
/**
* Determine if the application is running any of the given console commands.
*
* @param string|array $commands
* @return bool
* @static
*/
public static function runningConsoleCommand(...$commands)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningConsoleCommand(...$commands);
}
/**
* Determine if the application is running unit tests.
*
* @return bool
* @static
*/
public static function runningUnitTests()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningUnitTests();
}
/**
* Determine if the application is running with debug mode enabled.
*
* @return bool
* @static
*/
public static function hasDebugModeEnabled()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasDebugModeEnabled();
}
/**
* Register a new registered listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function registered($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registered($callback);
}
/**
* Register all of the configured providers.
*
* @return void
* @static
*/
public static function registerConfiguredProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerConfiguredProviders();
}
/**
* Register a service provider with the application.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @param bool $force
* @return \Illuminate\Support\ServiceProvider
* @static
*/
public static function register($provider, $force = false)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->register($provider, $force);
}
/**
* Get the registered service provider instance if it exists.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @return \Illuminate\Support\ServiceProvider|null
* @static
*/
public static function getProvider($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getProvider($provider);
}
/**
* Get the registered service provider instances if any exist.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @return array
* @static
*/
public static function getProviders($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getProviders($provider);
}
/**
* Resolve a service provider instance from the class name.
*
* @param string $provider
* @return \Illuminate\Support\ServiceProvider
* @static
*/
public static function resolveProvider($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resolveProvider($provider);
}
/**
* Load and boot all of the remaining deferred providers.
*
* @return void
* @static
*/
public static function loadDeferredProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->loadDeferredProviders();
}
/**
* Load the provider for a deferred service.
*
* @param string $service
* @return void
* @static
*/
public static function loadDeferredProvider($service)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->loadDeferredProvider($service);
}
/**
* Register a deferred provider and service.
*
* @param string $provider
* @param string|null $service
* @return void
* @static
*/
public static function registerDeferredProvider($provider, $service = null)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerDeferredProvider($provider, $service);
}
/**
* Resolve the given type from the container.
*
* @template TClass of object
* @param string|class-string<TClass> $abstract
* @param array $parameters
* @return ($abstract is class-string<TClass> ? TClass : mixed)
* @throws \Illuminate\Contracts\Container\BindingResolutionException
* @static
*/
public static function make($abstract, $parameters = [])
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->make($abstract, $parameters);
}
/**
* Determine if the given abstract type has been bound.
*
* @param string $abstract
* @return bool
* @static
*/
public static function bound($abstract)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->bound($abstract);
}
/**
* Determine if the application has booted.
*
* @return bool
* @static
*/
public static function isBooted()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isBooted();
}
/**
* Boot the application's service providers.
*
* @return void
* @static
*/
public static function boot()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->boot();
}
/**
* Register a new boot listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function booting($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->booting($callback);
}
/**
* Register a new "booted" listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function booted($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->booted($callback);
}
/**
* {@inheritdoc}
*
* @return \Symfony\Component\HttpFoundation\Response
* @static
*/
public static function handle($request, $type = 1, $catch = true)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->handle($request, $type, $catch);
}
/**
* Handle the incoming HTTP request and send the response to the browser.
*
* @param \Illuminate\Http\Request $request
* @return void
* @static
*/
public static function handleRequest($request)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->handleRequest($request);
}
/**
* Handle the incoming Artisan command.
*
* @param \Symfony\Component\Console\Input\InputInterface $input
* @return int
* @static
*/
public static function handleCommand($input)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->handleCommand($input);
}
/**
* Determine if the framework's base configuration should be merged.
*
* @return bool
* @static
*/
public static function shouldMergeFrameworkConfiguration()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->shouldMergeFrameworkConfiguration();
}
/**
* Indicate that the framework's base configuration should not be merged.
*
* @return \Illuminate\Foundation\Application
* @static
*/
public static function dontMergeFrameworkConfiguration()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->dontMergeFrameworkConfiguration();
}
/**
* Determine if middleware has been disabled for the application.
*
* @return bool
* @static
*/
public static function shouldSkipMiddleware()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->shouldSkipMiddleware();
}
/**
* Get the path to the cached services.php file.
*
* @return string
* @static
*/
public static function getCachedServicesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedServicesPath();
}
/**
* Get the path to the cached packages.php file.
*
* @return string
* @static
*/
public static function getCachedPackagesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedPackagesPath();
}
/**
* Determine if the application configuration is cached.
*
* @return bool
* @static
*/
public static function configurationIsCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->configurationIsCached();
}
/**
* Get the path to the configuration cache file.
*
* @return string
* @static
*/
public static function getCachedConfigPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedConfigPath();
}
/**
* Determine if the application routes are cached.
*
* @return bool
* @static
*/
public static function routesAreCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->routesAreCached();
}
/**
* Get the path to the routes cache file.
*
* @return string
* @static
*/
public static function getCachedRoutesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedRoutesPath();
}
/**
* Determine if the application events are cached.
*
* @return bool
* @static
*/
public static function eventsAreCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->eventsAreCached();
}
/**
* Get the path to the events cache file.
*
* @return string
* @static
*/
public static function getCachedEventsPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedEventsPath();
}
/**
* Add new prefix to list of absolute path prefixes.
*
* @param string $prefix
* @return \Illuminate\Foundation\Application
* @static
*/
public static function addAbsoluteCachePathPrefix($prefix)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->addAbsoluteCachePathPrefix($prefix);
}
/**
* Get an instance of the maintenance mode manager implementation.
*
* @return \Illuminate\Contracts\Foundation\MaintenanceMode
* @static
*/
public static function maintenanceMode()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->maintenanceMode();
}
/**
* Determine if the application is currently down for maintenance.
*
* @return bool
* @static
*/
public static function isDownForMaintenance()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isDownForMaintenance();
}
/**
* Throw an HttpException with the given data.
*
* @param int $code
* @param string $message
* @param array $headers
* @return never
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @static
*/
public static function abort($code, $message = '', $headers = [])
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->abort($code, $message, $headers);
}
/**
* Register a terminating callback with the application.
*
* @param callable|string $callback
* @return \Illuminate\Foundation\Application
* @static
*/
public static function terminating($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->terminating($callback);
}
/**
* Terminate the application.
*
* @return void
* @static
*/
public static function terminate()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->terminate();
}
/**
* Get the service providers that have been loaded.
*
* @return array<string, bool>
* @static
*/
public static function getLoadedProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getLoadedProviders();
}
/**
* Determine if the given service provider is loaded.
*
* @param string $provider
* @return bool
* @static
*/
public static function providerIsLoaded($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->providerIsLoaded($provider);
}
/**
* Get the application's deferred services.
*
* @return array
* @static
*/
public static function getDeferredServices()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getDeferredServices();
}
/**
* Set the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function setDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setDeferredServices($services);
}
/**
* Determine if the given service is a deferred service.
*
* @param string $service
* @return bool
* @static
*/
public static function isDeferredService($service)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isDeferredService($service);
}
/**
* Add an array of services to the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function addDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->addDeferredServices($services);
}
/**
* Remove an array of services from the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function removeDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->removeDeferredServices($services);
}
/**
* Configure the real-time facade namespace.
*
* @param string $namespace
* @return void
* @static
*/
public static function provideFacades($namespace)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->provideFacades($namespace);
}
/**
* Get the current application locale.
*
* @return string
* @static
*/
public static function getLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getLocale();
}
/**
* Get the current application locale.
*
* @return string
* @static
*/
public static function currentLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->currentLocale();
}
/**
* Get the current application fallback locale.
*
* @return string
* @static
*/
public static function getFallbackLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getFallbackLocale();
}
/**
* Set the current application locale.
*
* @param string $locale
* @return void
* @static
*/
public static function setLocale($locale)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setLocale($locale);
}
/**
* Set the current application fallback locale.
*
* @param string $fallbackLocale
* @return void
* @static
*/
public static function setFallbackLocale($fallbackLocale)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setFallbackLocale($fallbackLocale);
}
/**
* Determine if the application locale is the given locale.
*
* @param string $locale
* @return bool
* @static
*/
public static function isLocale($locale)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isLocale($locale);
}
/**
* Register the core class aliases in the container.
*
* @return void
* @static
*/
public static function registerCoreContainerAliases()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerCoreContainerAliases();
}
/**
* Flush the container of all bindings and resolved instances.
*
* @return void
* @static
*/
public static function flush()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->flush();
}
/**
* Get the application namespace.
*
* @return string
* @throws \RuntimeException
* @static
*/
public static function getNamespace()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getNamespace();
}
/**
* Define a contextual binding.
*
* @param array|string $concrete
* @return \Illuminate\Contracts\Container\ContextualBindingBuilder
* @static
*/
public static function when($concrete)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->when($concrete);
}
/**
* Define a contextual binding based on an attribute.
*
* @param string $attribute
* @param \Closure $handler
* @return void
* @static
*/
public static function whenHasAttribute($attribute, $handler)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->whenHasAttribute($attribute, $handler);
}
/**
* Returns true if the container can return an entry for the given identifier.
*
* Returns false otherwise.
*
* `has($id)` returning true does not mean that `get($id)` will not throw an exception.
* It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
*
* @return bool
* @param string $id Identifier of the entry to look for.
* @return bool
* @static
*/
public static function has($id)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->has($id);
}
/**
* Determine if the given abstract type has been resolved.
*
* @param string $abstract
* @return bool
* @static
*/
public static function resolved($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resolved($abstract);
}
/**
* Determine if a given type is shared.
*
* @param string $abstract
* @return bool
* @static
*/
public static function isShared($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isShared($abstract);
}
/**
* Determine if a given string is an alias.
*
* @param string $name
* @return bool
* @static
*/
public static function isAlias($name)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isAlias($name);
}
/**
* Register a binding with the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
* @throws \TypeError
* @throws ReflectionException
* @static
*/
public static function bind($abstract, $concrete = null, $shared = false)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bind($abstract, $concrete, $shared);
}
/**
* Determine if the container has a method binding.
*
* @param string $method
* @return bool
* @static
*/
public static function hasMethodBinding($method)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasMethodBinding($method);
}
/**
* Bind a callback to resolve with Container::call.
*
* @param array|string $method
* @param \Closure $callback
* @return void
* @static
*/
public static function bindMethod($method, $callback)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bindMethod($method, $callback);
}
/**
* Get the method binding for the given method.
*
* @param string $method
* @param mixed $instance
* @return mixed
* @static
*/
public static function callMethodBinding($method, $instance)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->callMethodBinding($method, $instance);
}
/**
* Add a contextual binding to the container.
*
* @param string $concrete
* @param \Closure|string $abstract
* @param \Closure|string $implementation
* @return void
* @static
*/
public static function addContextualBinding($concrete, $abstract, $implementation)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->addContextualBinding($concrete, $abstract, $implementation);
}
/**
* Register a binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
* @static
*/
public static function bindIf($abstract, $concrete = null, $shared = false)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bindIf($abstract, $concrete, $shared);
}
/**
* Register a shared binding in the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function singleton($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->singleton($abstract, $concrete);
}
/**
* Register a shared binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function singletonIf($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->singletonIf($abstract, $concrete);
}
/**
* Register a scoped binding in the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function scoped($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->scoped($abstract, $concrete);
}
/**
* Register a scoped binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function scopedIf($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->scopedIf($abstract, $concrete);
}
/**
* "Extend" an abstract type in the container.
*
* @param string $abstract
* @param \Closure $closure
* @return void
* @throws \InvalidArgumentException
* @static
*/
public static function extend($abstract, $closure)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->extend($abstract, $closure);
}
/**
* Register an existing instance as shared in the container.
*
* @template TInstance of mixed
* @param string $abstract
* @param TInstance $instance
* @return TInstance
* @static
*/
public static function instance($abstract, $instance)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->instance($abstract, $instance);
}
/**
* Assign a set of tags to a given binding.
*
* @param array|string $abstracts
* @param mixed $tags
* @return void
* @static
*/
public static function tag($abstracts, $tags)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->tag($abstracts, $tags);
}
/**
* Resolve all of the bindings for a given tag.
*
* @param string $tag
* @return iterable
* @static
*/
public static function tagged($tag)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->tagged($tag);
}
/**
* Alias a type to a different name.
*
* @param string $abstract
* @param string $alias
* @return void
* @throws \LogicException
* @static
*/
public static function alias($abstract, $alias)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->alias($abstract, $alias);
}
/**
* Bind a new callback to an abstract's rebind event.
*
* @param string $abstract
* @param \Closure $callback
* @return mixed
* @static
*/
public static function rebinding($abstract, $callback)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->rebinding($abstract, $callback);
}
/**
* Refresh an instance on the given target and method.
*
* @param string $abstract
* @param mixed $target
* @param string $method
* @return mixed
* @static
*/
public static function refresh($abstract, $target, $method)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->refresh($abstract, $target, $method);
}
/**
* Wrap the given closure such that its dependencies will be injected when executed.
*
* @param \Closure $callback
* @param array $parameters
* @return \Closure
* @static
*/
public static function wrap($callback, $parameters = [])
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->wrap($callback, $parameters);
}
/**
* Call the given Closure / class@method and inject its dependencies.
*
* @param callable|string $callback
* @param array<string, mixed> $parameters
* @param string|null $defaultMethod
* @return mixed
* @throws \InvalidArgumentException
* @static
*/
public static function call($callback, $parameters = [], $defaultMethod = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->call($callback, $parameters, $defaultMethod);
}
/**
* Get a closure to resolve the given type from the container.
*
* @template TClass of object
* @param string|class-string<TClass> $abstract
* @return ($abstract is class-string<TClass> ? \Closure(): TClass : \Closure(): mixed)
* @static
*/
public static function factory($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->factory($abstract);
}
/**
* An alias function name for make().
*
* @template TClass of object
* @param string|class-string<TClass>|callable $abstract
* @param array $parameters
* @return ($abstract is class-string<TClass> ? TClass : mixed)
* @throws \Illuminate\Contracts\Container\BindingResolutionException
* @static
*/
public static function makeWith($abstract, $parameters = [])
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->makeWith($abstract, $parameters);
}
/**
* {@inheritdoc}
*
* @template TClass of object
* @param string|class-string<TClass> $id
* @return ($id is class-string<TClass> ? TClass : mixed)
* @static
*/
public static function get($id)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $i...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Built-in Preview","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chrome","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Firefox","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Safari","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Analyzing…","depth":4,"bounds":{"left":0.3879654,"top":0.19952115,"width":0.019946808,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<?php\n/* @noinspection ALL */\n// @formatter:off\n// phpcs:ignoreFile\n\n/**\n * A helper file for Laravel, to provide autocomplete information to your IDE\n * Generated for Laravel 12.33.0.\n *\n * This file should not be included in your code, only analyzed by your IDE!\n *\n * @author Barry vd. Heuvel <barryvdh@gmail.com>\n * @see https://github.com/barryvdh/laravel-ide-helper\n */\nnamespace Illuminate\\Support\\Facades {\n /**\n * @see \\Illuminate\\Foundation\\Application\n */\n class App {\n /**\n * Begin configuring a new Laravel application instance.\n *\n * @param string|null $basePath\n * @return \\Illuminate\\Foundation\\Configuration\\ApplicationBuilder\n * @static\n */\n public static function configure($basePath = null)\n {\n return \\Illuminate\\Foundation\\Application::configure($basePath);\n }\n\n /**\n * Infer the application's base directory from the environment.\n *\n * @return string\n * @static\n */\n public static function inferBasePath()\n {\n return \\Illuminate\\Foundation\\Application::inferBasePath();\n }\n\n /**\n * Get the version number of the application.\n *\n * @return string\n * @static\n */\n public static function version()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->version();\n }\n\n /**\n * Run the given array of bootstrap classes.\n *\n * @param string[] $bootstrappers\n * @return void\n * @static\n */\n public static function bootstrapWith($bootstrappers)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bootstrapWith($bootstrappers);\n }\n\n /**\n * Register a callback to run after loading the environment.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterLoadingEnvironment($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterLoadingEnvironment($callback);\n }\n\n /**\n * Register a callback to run before a bootstrapper.\n *\n * @param string $bootstrapper\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function beforeBootstrapping($bootstrapper, $callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->beforeBootstrapping($bootstrapper, $callback);\n }\n\n /**\n * Register a callback to run after a bootstrapper.\n *\n * @param string $bootstrapper\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterBootstrapping($bootstrapper, $callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterBootstrapping($bootstrapper, $callback);\n }\n\n /**\n * Determine if the application has been bootstrapped before.\n *\n * @return bool\n * @static\n */\n public static function hasBeenBootstrapped()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasBeenBootstrapped();\n }\n\n /**\n * Set the base path for the application.\n *\n * @param string $basePath\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function setBasePath($basePath)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->setBasePath($basePath);\n }\n\n /**\n * Get the path to the application \"app\" directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function path($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->path($path);\n }\n\n /**\n * Set the application directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useAppPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useAppPath($path);\n }\n\n /**\n * Get the base path of the Laravel installation.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function basePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->basePath($path);\n }\n\n /**\n * Get the path to the bootstrap directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function bootstrapPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->bootstrapPath($path);\n }\n\n /**\n * Get the path to the service provider list in the bootstrap directory.\n *\n * @return string\n * @static\n */\n public static function getBootstrapProvidersPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getBootstrapProvidersPath();\n }\n\n /**\n * Set the bootstrap file directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useBootstrapPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useBootstrapPath($path);\n }\n\n /**\n * Get the path to the application configuration files.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function configPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->configPath($path);\n }\n\n /**\n * Set the configuration directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useConfigPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useConfigPath($path);\n }\n\n /**\n * Get the path to the database directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function databasePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->databasePath($path);\n }\n\n /**\n * Set the database directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useDatabasePath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useDatabasePath($path);\n }\n\n /**\n * Get the path to the language files.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function langPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->langPath($path);\n }\n\n /**\n * Set the language file directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useLangPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useLangPath($path);\n }\n\n /**\n * Get the path to the public / web directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function publicPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->publicPath($path);\n }\n\n /**\n * Set the public / web directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function usePublicPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->usePublicPath($path);\n }\n\n /**\n * Get the path to the storage directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function storagePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->storagePath($path);\n }\n\n /**\n * Set the storage directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useStoragePath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useStoragePath($path);\n }\n\n /**\n * Get the path to the resources directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function resourcePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resourcePath($path);\n }\n\n /**\n * Get the path to the views directory.\n * \n * This method returns the first configured path in the array of view paths.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function viewPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->viewPath($path);\n }\n\n /**\n * Join the given paths together.\n *\n * @param string $basePath\n * @param string $path\n * @return string\n * @static\n */\n public static function joinPaths($basePath, $path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->joinPaths($basePath, $path);\n }\n\n /**\n * Get the path to the environment file directory.\n *\n * @return string\n * @static\n */\n public static function environmentPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentPath();\n }\n\n /**\n * Set the directory for the environment file.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useEnvironmentPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useEnvironmentPath($path);\n }\n\n /**\n * Set the environment file to be loaded during bootstrapping.\n *\n * @param string $file\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function loadEnvironmentFrom($file)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->loadEnvironmentFrom($file);\n }\n\n /**\n * Get the environment file the application is using.\n *\n * @return string\n * @static\n */\n public static function environmentFile()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentFile();\n }\n\n /**\n * Get the fully qualified path to the environment file.\n *\n * @return string\n * @static\n */\n public static function environmentFilePath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentFilePath();\n }\n\n /**\n * Get or check the current application environment.\n *\n * @param string|array $environments\n * @return string|bool\n * @static\n */\n public static function environment(...$environments)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environment(...$environments);\n }\n\n /**\n * Determine if the application is in the local environment.\n *\n * @return bool\n * @static\n */\n public static function isLocal()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isLocal();\n }\n\n /**\n * Determine if the application is in the production environment.\n *\n * @return bool\n * @static\n */\n public static function isProduction()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isProduction();\n }\n\n /**\n * Detect the application's current environment.\n *\n * @param \\Closure $callback\n * @return string\n * @static\n */\n public static function detectEnvironment($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->detectEnvironment($callback);\n }\n\n /**\n * Determine if the application is running in the console.\n *\n * @return bool\n * @static\n */\n public static function runningInConsole()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningInConsole();\n }\n\n /**\n * Determine if the application is running any of the given console commands.\n *\n * @param string|array $commands\n * @return bool\n * @static\n */\n public static function runningConsoleCommand(...$commands)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningConsoleCommand(...$commands);\n }\n\n /**\n * Determine if the application is running unit tests.\n *\n * @return bool\n * @static\n */\n public static function runningUnitTests()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningUnitTests();\n }\n\n /**\n * Determine if the application is running with debug mode enabled.\n *\n * @return bool\n * @static\n */\n public static function hasDebugModeEnabled()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasDebugModeEnabled();\n }\n\n /**\n * Register a new registered listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function registered($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registered($callback);\n }\n\n /**\n * Register all of the configured providers.\n *\n * @return void\n * @static\n */\n public static function registerConfiguredProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerConfiguredProviders();\n }\n\n /**\n * Register a service provider with the application.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @param bool $force\n * @return \\Illuminate\\Support\\ServiceProvider\n * @static\n */\n public static function register($provider, $force = false)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->register($provider, $force);\n }\n\n /**\n * Get the registered service provider instance if it exists.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @return \\Illuminate\\Support\\ServiceProvider|null\n * @static\n */\n public static function getProvider($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getProvider($provider);\n }\n\n /**\n * Get the registered service provider instances if any exist.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @return array\n * @static\n */\n public static function getProviders($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getProviders($provider);\n }\n\n /**\n * Resolve a service provider instance from the class name.\n *\n * @param string $provider\n * @return \\Illuminate\\Support\\ServiceProvider\n * @static\n */\n public static function resolveProvider($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolveProvider($provider);\n }\n\n /**\n * Load and boot all of the remaining deferred providers.\n *\n * @return void\n * @static\n */\n public static function loadDeferredProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->loadDeferredProviders();\n }\n\n /**\n * Load the provider for a deferred service.\n *\n * @param string $service\n * @return void\n * @static\n */\n public static function loadDeferredProvider($service)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->loadDeferredProvider($service);\n }\n\n /**\n * Register a deferred provider and service.\n *\n * @param string $provider\n * @param string|null $service\n * @return void\n * @static\n */\n public static function registerDeferredProvider($provider, $service = null)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerDeferredProvider($provider, $service);\n }\n\n /**\n * Resolve the given type from the container.\n *\n * @template TClass of object\n * @param string|class-string<TClass> $abstract\n * @param array $parameters\n * @return ($abstract is class-string<TClass> ? TClass : mixed)\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function make($abstract, $parameters = [])\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->make($abstract, $parameters);\n }\n\n /**\n * Determine if the given abstract type has been bound.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function bound($abstract)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->bound($abstract);\n }\n\n /**\n * Determine if the application has booted.\n *\n * @return bool\n * @static\n */\n public static function isBooted()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isBooted();\n }\n\n /**\n * Boot the application's service providers.\n *\n * @return void\n * @static\n */\n public static function boot()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->boot();\n }\n\n /**\n * Register a new boot listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function booting($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->booting($callback);\n }\n\n /**\n * Register a new \"booted\" listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function booted($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->booted($callback);\n }\n\n /**\n * {@inheritdoc}\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function handle($request, $type = 1, $catch = true)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->handle($request, $type, $catch);\n }\n\n /**\n * Handle the incoming HTTP request and send the response to the browser.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function handleRequest($request)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->handleRequest($request);\n }\n\n /**\n * Handle the incoming Artisan command.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @return int\n * @static\n */\n public static function handleCommand($input)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->handleCommand($input);\n }\n\n /**\n * Determine if the framework's base configuration should be merged.\n *\n * @return bool\n * @static\n */\n public static function shouldMergeFrameworkConfiguration()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->shouldMergeFrameworkConfiguration();\n }\n\n /**\n * Indicate that the framework's base configuration should not be merged.\n *\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function dontMergeFrameworkConfiguration()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->dontMergeFrameworkConfiguration();\n }\n\n /**\n * Determine if middleware has been disabled for the application.\n *\n * @return bool\n * @static\n */\n public static function shouldSkipMiddleware()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->shouldSkipMiddleware();\n }\n\n /**\n * Get the path to the cached services.php file.\n *\n * @return string\n * @static\n */\n public static function getCachedServicesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedServicesPath();\n }\n\n /**\n * Get the path to the cached packages.php file.\n *\n * @return string\n * @static\n */\n public static function getCachedPackagesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedPackagesPath();\n }\n\n /**\n * Determine if the application configuration is cached.\n *\n * @return bool\n * @static\n */\n public static function configurationIsCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->configurationIsCached();\n }\n\n /**\n * Get the path to the configuration cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedConfigPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedConfigPath();\n }\n\n /**\n * Determine if the application routes are cached.\n *\n * @return bool\n * @static\n */\n public static function routesAreCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->routesAreCached();\n }\n\n /**\n * Get the path to the routes cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedRoutesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedRoutesPath();\n }\n\n /**\n * Determine if the application events are cached.\n *\n * @return bool\n * @static\n */\n public static function eventsAreCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->eventsAreCached();\n }\n\n /**\n * Get the path to the events cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedEventsPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedEventsPath();\n }\n\n /**\n * Add new prefix to list of absolute path prefixes.\n *\n * @param string $prefix\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function addAbsoluteCachePathPrefix($prefix)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->addAbsoluteCachePathPrefix($prefix);\n }\n\n /**\n * Get an instance of the maintenance mode manager implementation.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\MaintenanceMode\n * @static\n */\n public static function maintenanceMode()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->maintenanceMode();\n }\n\n /**\n * Determine if the application is currently down for maintenance.\n *\n * @return bool\n * @static\n */\n public static function isDownForMaintenance()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isDownForMaintenance();\n }\n\n /**\n * Throw an HttpException with the given data.\n *\n * @param int $code\n * @param string $message\n * @param array $headers\n * @return never\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\HttpException\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException\n * @static\n */\n public static function abort($code, $message = '', $headers = [])\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->abort($code, $message, $headers);\n }\n\n /**\n * Register a terminating callback with the application.\n *\n * @param callable|string $callback\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function terminating($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->terminating($callback);\n }\n\n /**\n * Terminate the application.\n *\n * @return void\n * @static\n */\n public static function terminate()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->terminate();\n }\n\n /**\n * Get the service providers that have been loaded.\n *\n * @return array<string, bool>\n * @static\n */\n public static function getLoadedProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getLoadedProviders();\n }\n\n /**\n * Determine if the given service provider is loaded.\n *\n * @param string $provider\n * @return bool\n * @static\n */\n public static function providerIsLoaded($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->providerIsLoaded($provider);\n }\n\n /**\n * Get the application's deferred services.\n *\n * @return array\n * @static\n */\n public static function getDeferredServices()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getDeferredServices();\n }\n\n /**\n * Set the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function setDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setDeferredServices($services);\n }\n\n /**\n * Determine if the given service is a deferred service.\n *\n * @param string $service\n * @return bool\n * @static\n */\n public static function isDeferredService($service)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isDeferredService($service);\n }\n\n /**\n * Add an array of services to the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function addDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->addDeferredServices($services);\n }\n\n /**\n * Remove an array of services from the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function removeDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->removeDeferredServices($services);\n }\n\n /**\n * Configure the real-time facade namespace.\n *\n * @param string $namespace\n * @return void\n * @static\n */\n public static function provideFacades($namespace)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->provideFacades($namespace);\n }\n\n /**\n * Get the current application locale.\n *\n * @return string\n * @static\n */\n public static function getLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getLocale();\n }\n\n /**\n * Get the current application locale.\n *\n * @return string\n * @static\n */\n public static function currentLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentLocale();\n }\n\n /**\n * Get the current application fallback locale.\n *\n * @return string\n * @static\n */\n public static function getFallbackLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getFallbackLocale();\n }\n\n /**\n * Set the current application locale.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setLocale($locale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setLocale($locale);\n }\n\n /**\n * Set the current application fallback locale.\n *\n * @param string $fallbackLocale\n * @return void\n * @static\n */\n public static function setFallbackLocale($fallbackLocale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setFallbackLocale($fallbackLocale);\n }\n\n /**\n * Determine if the application locale is the given locale.\n *\n * @param string $locale\n * @return bool\n * @static\n */\n public static function isLocale($locale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isLocale($locale);\n }\n\n /**\n * Register the core class aliases in the container.\n *\n * @return void\n * @static\n */\n public static function registerCoreContainerAliases()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerCoreContainerAliases();\n }\n\n /**\n * Flush the container of all bindings and resolved instances.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->flush();\n }\n\n /**\n * Get the application namespace.\n *\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function getNamespace()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getNamespace();\n }\n\n /**\n * Define a contextual binding.\n *\n * @param array|string $concrete\n * @return \\Illuminate\\Contracts\\Container\\ContextualBindingBuilder\n * @static\n */\n public static function when($concrete)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->when($concrete);\n }\n\n /**\n * Define a contextual binding based on an attribute.\n *\n * @param string $attribute\n * @param \\Closure $handler\n * @return void\n * @static\n */\n public static function whenHasAttribute($attribute, $handler)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->whenHasAttribute($attribute, $handler);\n }\n\n /**\n * Returns true if the container can return an entry for the given identifier.\n * \n * Returns false otherwise.\n * \n * `has($id)` returning true does not mean that `get($id)` will not throw an exception.\n * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.\n *\n * @return bool\n * @param string $id Identifier of the entry to look for.\n * @return bool\n * @static\n */\n public static function has($id)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->has($id);\n }\n\n /**\n * Determine if the given abstract type has been resolved.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function resolved($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolved($abstract);\n }\n\n /**\n * Determine if a given type is shared.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function isShared($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isShared($abstract);\n }\n\n /**\n * Determine if a given string is an alias.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function isAlias($name)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isAlias($name);\n }\n\n /**\n * Register a binding with the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @param bool $shared\n * @return void\n * @throws \\TypeError\n * @throws ReflectionException\n * @static\n */\n public static function bind($abstract, $concrete = null, $shared = false)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bind($abstract, $concrete, $shared);\n }\n\n /**\n * Determine if the container has a method binding.\n *\n * @param string $method\n * @return bool\n * @static\n */\n public static function hasMethodBinding($method)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasMethodBinding($method);\n }\n\n /**\n * Bind a callback to resolve with Container::call.\n *\n * @param array|string $method\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function bindMethod($method, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bindMethod($method, $callback);\n }\n\n /**\n * Get the method binding for the given method.\n *\n * @param string $method\n * @param mixed $instance\n * @return mixed\n * @static\n */\n public static function callMethodBinding($method, $instance)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->callMethodBinding($method, $instance);\n }\n\n /**\n * Add a contextual binding to the container.\n *\n * @param string $concrete\n * @param \\Closure|string $abstract\n * @param \\Closure|string $implementation\n * @return void\n * @static\n */\n public static function addContextualBinding($concrete, $abstract, $implementation)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->addContextualBinding($concrete, $abstract, $implementation);\n }\n\n /**\n * Register a binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @param bool $shared\n * @return void\n * @static\n */\n public static function bindIf($abstract, $concrete = null, $shared = false)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bindIf($abstract, $concrete, $shared);\n }\n\n /**\n * Register a shared binding in the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function singleton($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->singleton($abstract, $concrete);\n }\n\n /**\n * Register a shared binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function singletonIf($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->singletonIf($abstract, $concrete);\n }\n\n /**\n * Register a scoped binding in the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function scoped($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->scoped($abstract, $concrete);\n }\n\n /**\n * Register a scoped binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function scopedIf($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->scopedIf($abstract, $concrete);\n }\n\n /**\n * \"Extend\" an abstract type in the container.\n *\n * @param string $abstract\n * @param \\Closure $closure\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function extend($abstract, $closure)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->extend($abstract, $closure);\n }\n\n /**\n * Register an existing instance as shared in the container.\n *\n * @template TInstance of mixed\n * @param string $abstract\n * @param TInstance $instance\n * @return TInstance\n * @static\n */\n public static function instance($abstract, $instance)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->instance($abstract, $instance);\n }\n\n /**\n * Assign a set of tags to a given binding.\n *\n * @param array|string $abstracts\n * @param mixed $tags\n * @return void\n * @static\n */\n public static function tag($abstracts, $tags)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->tag($abstracts, $tags);\n }\n\n /**\n * Resolve all of the bindings for a given tag.\n *\n * @param string $tag\n * @return iterable\n * @static\n */\n public static function tagged($tag)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->tagged($tag);\n }\n\n /**\n * Alias a type to a different name.\n *\n * @param string $abstract\n * @param string $alias\n * @return void\n * @throws \\LogicException\n * @static\n */\n public static function alias($abstract, $alias)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->alias($abstract, $alias);\n }\n\n /**\n * Bind a new callback to an abstract's rebind event.\n *\n * @param string $abstract\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function rebinding($abstract, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->rebinding($abstract, $callback);\n }\n\n /**\n * Refresh an instance on the given target and method.\n *\n * @param string $abstract\n * @param mixed $target\n * @param string $method\n * @return mixed\n * @static\n */\n public static function refresh($abstract, $target, $method)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->refresh($abstract, $target, $method);\n }\n\n /**\n * Wrap the given closure such that its dependencies will be injected when executed.\n *\n * @param \\Closure $callback\n * @param array $parameters\n * @return \\Closure\n * @static\n */\n public static function wrap($callback, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->wrap($callback, $parameters);\n }\n\n /**\n * Call the given Closure / class@method and inject its dependencies.\n *\n * @param callable|string $callback\n * @param array<string, mixed> $parameters\n * @param string|null $defaultMethod\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function call($callback, $parameters = [], $defaultMethod = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->call($callback, $parameters, $defaultMethod);\n }\n\n /**\n * Get a closure to resolve the given type from the container.\n *\n * @template TClass of object\n * @param string|class-string<TClass> $abstract\n * @return ($abstract is class-string<TClass> ? \\Closure(): TClass : \\Closure(): mixed)\n * @static\n */\n public static function factory($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->factory($abstract);\n }\n\n /**\n * An alias function name for make().\n *\n * @template TClass of object\n * @param string|class-string<TClass>|callable $abstract\n * @param array $parameters\n * @return ($abstract is class-string<TClass> ? TClass : mixed)\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function makeWith($abstract, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->makeWith($abstract, $parameters);\n }\n\n /**\n * {@inheritdoc}\n *\n * @template TClass of object\n * @param string|class-string<TClass> $id\n * @return ($id is class-string<TClass> ? TClass : mixed)\n * @static\n */\n public static function get($id)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->get($id);\n }\n\n /**\n * Instantiate a concrete instance of the given type.\n *\n * @template TClass of object\n * @param \\Closure(static, array): TClass|class-string<TClass> $concrete\n * @return TClass\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @throws \\Illuminate\\Contracts\\Container\\CircularDependencyException\n * @static\n */\n public static function build($concrete)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->build($concrete);\n }\n\n /**\n * Resolve a dependency based on an attribute.\n *\n * @param \\ReflectionAttribute $attribute\n * @return mixed\n * @static\n */\n public static function resolveFromAttribute($attribute)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolveFromAttribute($attribute);\n }\n\n /**\n * Register a new before resolving callback for all types.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function beforeResolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->beforeResolving($abstract, $callback);\n }\n\n /**\n * Register a new resolving callback.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function resolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->resolving($abstract, $callback);\n }\n\n /**\n * Register a new after resolving callback for all types.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function afterResolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterResolving($abstract, $callback);\n }\n\n /**\n * Register a new after resolving attribute callback for all types.\n *\n * @param string $attribute\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterResolvingAttribute($attribute, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterResolvingAttribute($attribute, $callback);\n }\n\n /**\n * Fire all of the after resolving attribute callbacks.\n *\n * @param \\ReflectionAttribute[] $attributes\n * @param mixed $object\n * @return void\n * @static\n */\n public static function fireAfterResolvingAttributeCallbacks($attributes, $object)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->fireAfterResolvingAttributeCallbacks($attributes, $object);\n }\n\n /**\n * Get the name of the binding the container is currently resolving.\n *\n * @return class-string|string|null\n * @static\n */\n public static function currentlyResolving()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentlyResolving();\n }\n\n /**\n * Get the container's bindings.\n *\n * @return array\n * @static\n */\n public static function getBindings()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getBindings();\n }\n\n /**\n * Get the alias for an abstract if available.\n *\n * @param string $abstract\n * @return string\n * @static\n */\n public static function getAlias($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getAlias($abstract);\n }\n\n /**\n * Remove all of the extender callbacks for a given type.\n *\n * @param string $abstract\n * @return void\n * @static\n */\n public static function forgetExtenders($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetExtenders($abstract);\n }\n\n /**\n * Remove a resolved instance from the instance cache.\n *\n * @param string $abstract\n * @return void\n * @static\n */\n public static function forgetInstance($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetInstance($abstract);\n }\n\n /**\n * Clear all of the instances from the container.\n *\n * @return void\n * @static\n */\n public static function forgetInstances()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetInstances();\n }\n\n /**\n * Clear all of the scoped instances from the container.\n *\n * @return void\n * @static\n */\n public static function forgetScopedInstances()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetScopedInstances();\n }\n\n /**\n * Set the callback which determines the current container environment.\n *\n * @param (callable(array<int, string>|string): bool|string)|null $callback\n * @return void\n * @static\n */\n public static function resolveEnvironmentUsing($callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->resolveEnvironmentUsing($callback);\n }\n\n /**\n * Determine the environment for the container.\n *\n * @param array<int, string>|string $environments\n * @return bool\n * @static\n */\n public static function currentEnvironmentIs($environments)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentEnvironmentIs($environments);\n }\n\n /**\n * Get the globally available instance of the container.\n *\n * @return static\n * @static\n */\n public static function getInstance()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n return \\Illuminate\\Foundation\\Application::getInstance();\n }\n\n /**\n * Set the shared instance of the container.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container|null $container\n * @return \\Illuminate\\Contracts\\Container\\Container|static\n * @static\n */\n public static function setInstance($container = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n return \\Illuminate\\Foundation\\Application::setInstance($container);\n }\n\n /**\n * Determine if a given offset exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Get the value at a given offset.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Set the value at a given offset.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Unset the value at a given offset.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Foundation\\Application::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Foundation\\Application::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Foundation\\Application::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Foundation\\Application::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Foundation\\Console\\Kernel\n */\n class Artisan {\n /**\n * Re-route the Symfony command events to their Laravel counterparts.\n *\n * @internal\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function rerouteSymfonyCommandEvents()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->rerouteSymfonyCommandEvents();\n }\n\n /**\n * Run the console application.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @param \\Symfony\\Component\\Console\\Output\\OutputInterface|null $output\n * @return int\n * @static\n */\n public static function handle($input, $output = null)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->handle($input, $output);\n }\n\n /**\n * Terminate the application.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @param int $status\n * @return void\n * @static\n */\n public static function terminate($input, $status)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->terminate($input, $status);\n }\n\n /**\n * Register a callback to be invoked when the command lifecycle duration exceeds a given amount of time.\n *\n * @param \\DateTimeInterface|\\Carbon\\CarbonInterval|float|int $threshold\n * @param callable $handler\n * @return void\n * @static\n */\n public static function whenCommandLifecycleIsLongerThan($threshold, $handler)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->whenCommandLifecycleIsLongerThan($threshold, $handler);\n }\n\n /**\n * When the command being handled started.\n *\n * @return \\Illuminate\\Support\\Carbon|null\n * @static\n */\n public static function commandStartedAt()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->commandStartedAt();\n }\n\n /**\n * Resolve a console schedule instance.\n *\n * @return \\Illuminate\\Console\\Scheduling\\Schedule\n * @static\n */\n public static function resolveConsoleSchedule()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->resolveConsoleSchedule();\n }\n\n /**\n * Register a Closure based command with the application.\n *\n * @param string $signature\n * @param \\Closure $callback\n * @return \\Illuminate\\Foundation\\Console\\ClosureCommand\n * @static\n */\n public static function command($signature, $callback)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->command($signature, $callback);\n }\n\n /**\n * Register the given command with the console application.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command $command\n * @return void\n * @static\n */\n public static function registerCommand($command)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->registerCommand($command);\n }\n\n /**\n * Run an Artisan console command by name.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command|string $command\n * @param array $parameters\n * @param \\Symfony\\Component\\Console\\Output\\OutputInterface|null $outputBuffer\n * @return int\n * @throws \\Symfony\\Component\\Console\\Exception\\CommandNotFoundException\n * @static\n */\n public static function call($command, $parameters = [], $outputBuffer = null)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->call($command, $parameters, $outputBuffer);\n }\n\n /**\n * Queue the given console command.\n *\n * @param string $command\n * @param array $parameters\n * @return \\Illuminate\\Foundation\\Bus\\PendingDispatch\n * @static\n */\n public static function queue($command, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->queue($command, $parameters);\n }\n\n /**\n * Get all of the commands registered with the console.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->all();\n }\n\n /**\n * Get the output for the last run command.\n *\n * @return string\n * @static\n */\n public static function output()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->output();\n }\n\n /**\n * Bootstrap the application for artisan commands.\n *\n * @return void\n * @static\n */\n public static function bootstrap()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->bootstrap();\n }\n\n /**\n * Bootstrap the application without booting service providers.\n *\n * @return void\n * @static\n */\n public static function bootstrapWithoutBootingProviders()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->bootstrapWithoutBootingProviders();\n }\n\n /**\n * Set the Artisan application instance.\n *\n * @param \\Illuminate\\Console\\Application|null $artisan\n * @return void\n * @static\n */\n public static function setArtisan($artisan)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->setArtisan($artisan);\n }\n\n /**\n * Set the Artisan commands provided by the application.\n *\n * @param array $commands\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommands($commands)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommands($commands);\n }\n\n /**\n * Set the paths that should have their Artisan commands automatically discovered.\n *\n * @param array $paths\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommandPaths($paths)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommandPaths($paths);\n }\n\n /**\n * Set the paths that should have their Artisan \"routes\" automatically discovered.\n *\n * @param array $paths\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommandRoutePaths($paths)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommandRoutePaths($paths);\n }\n\n /**\n * Confirm before proceeding with the action.\n * \n * This method only asks for confirmation in production.\n *\n * @param string $warning\n * @param \\Closure|bool|null $callback\n * @return bool\n * @static\n */\n public static function confirmToProceed($warning = 'Application In Production', $callback = null)\n {\n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->confirmToProceed($warning, $callback);\n }\n\n }\n /**\n * @see \\Illuminate\\Auth\\AuthManager\n * @see \\Illuminate\\Auth\\SessionGuard\n */\n class Auth {\n /**\n * Attempt to get the guard from the local cache.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Auth\\Guard|\\Illuminate\\Contracts\\Auth\\StatefulGuard\n * @static\n */\n public static function guard($name = null)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->guard($name);\n }\n\n /**\n * Create a session based authentication guard.\n *\n * @param string $name\n * @param array $config\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function createSessionDriver($name, $config)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createSessionDriver($name, $config);\n }\n\n /**\n * Create a token based authentication guard.\n *\n * @param string $name\n * @param array $config\n * @return \\Illuminate\\Auth\\TokenGuard\n * @static\n */\n public static function createTokenDriver($name, $config)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createTokenDriver($name, $config);\n }\n\n /**\n * Get the default authentication driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default guard driver the factory should serve.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function shouldUse($name)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n $instance->shouldUse($name);\n }\n\n /**\n * Set the default authentication driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Register a new callback based request guard.\n *\n * @param string $driver\n * @param callable $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function viaRequest($driver, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->viaRequest($driver, $callback);\n }\n\n /**\n * Get the user resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function userResolver()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->userResolver();\n }\n\n /**\n * Set the callback to be used to resolve users.\n *\n * @param \\Closure $userResolver\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function resolveUsersUsing($userResolver)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->resolveUsersUsing($userResolver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Register a custom provider creator Closure.\n *\n * @param string $name\n * @param \\Closure $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function provider($name, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->provider($name, $callback);\n }\n\n /**\n * Determines if any guards have already been resolved.\n *\n * @return bool\n * @static\n */\n public static function hasResolvedGuards()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->hasResolvedGuards();\n }\n\n /**\n * Forget all of the resolved guard instances.\n *\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function forgetGuards()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->forgetGuards();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Create the user provider implementation for the driver.\n *\n * @param string|null $provider\n * @return \\Illuminate\\Contracts\\Auth\\UserProvider|null\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function createUserProvider($provider = null)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createUserProvider($provider);\n }\n\n /**\n * Get the default user provider name.\n *\n * @return string\n * @static\n */\n public static function getDefaultUserProvider()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->getDefaultUserProvider();\n }\n\n /**\n * Get the currently authenticated user.\n *\n * @return \\Jiminny\\Models\\User|null\n * @static\n */\n public static function user()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->user();\n }\n\n /**\n * Get the ID for the currently authenticated user.\n *\n * @return int|string|null\n * @static\n */\n public static function id()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->id();\n }\n\n /**\n * Log a user into the application without sessions or cookies.\n *\n * @param array $credentials\n * @return bool\n * @static\n */\n public static function once($credentials = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->once($credentials);\n }\n\n /**\n * Log the given user ID into the application without sessions or cookies.\n *\n * @param mixed $id\n * @return \\Jiminny\\Models\\User|false\n * @static\n */\n public static function onceUsingId($id)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->onceUsingId($id);\n }\n\n /**\n * Validate a user's credentials.\n *\n * @param array $credentials\n * @return bool\n * @static\n */\n public static function validate($credentials = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->validate($credentials);\n }\n\n /**\n * Attempt to authenticate using HTTP Basic Auth.\n *\n * @param string $field\n * @param array $extraConditions\n * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException\n * @static\n */\n public static function basic($field = 'email', $extraConditions = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->basic($field, $extraConditions);\n }\n\n /**\n * Perform a stateless HTTP Basic login attempt.\n *\n * @param string $field\n * @param array $extraConditions\n * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException\n * @static\n */\n public static function onceBasic($field = 'email', $extraConditions = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->onceBasic($field, $extraConditions);\n }\n\n /**\n * Attempt to authenticate a user using the given credentials.\n *\n * @param array $credentials\n * @param bool $remember\n * @return bool\n * @static\n */\n public static function attempt($credentials = [], $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->attempt($credentials, $remember);\n }\n\n /**\n * Attempt to authenticate a user with credentials and additional callbacks.\n *\n * @param array $credentials\n * @param array|callable|null $callbacks\n * @param bool $remember\n * @return bool\n * @static\n */\n public static function attemptWhen($credentials = [], $callbacks = null, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->attemptWhen($credentials, $callbacks, $remember);\n }\n\n /**\n * Log the given user ID into the application.\n *\n * @param mixed $id\n * @param bool $remember\n * @return \\Jiminny\\Models\\User|false\n * @static\n */\n public static function loginUsingId($id, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->loginUsingId($id, $remember);\n }\n\n /**\n * Log a user into the application.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable $user\n * @param bool $remember\n * @return void\n * @static\n */\n public static function login($user, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->login($user, $remember);\n }\n\n /**\n * Log the user out of the application.\n *\n * @return void\n * @static\n */\n public static function logout()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->logout();\n }\n\n /**\n * Log the user out of the application on their current device only.\n * \n * This method does not cycle the \"remember\" token.\n *\n * @return void\n * @static\n */\n public static function logoutCurrentDevice()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->logoutCurrentDevice();\n }\n\n /**\n * Invalidate other sessions for the current user.\n * \n * The application must be using the AuthenticateSession middleware.\n *\n * @param string $password\n * @return \\Jiminny\\Models\\User|null\n * @throws \\Illuminate\\Auth\\AuthenticationException\n * @static\n */\n public static function logoutOtherDevices($password)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->logoutOtherDevices($password);\n }\n\n /**\n * Register an authentication attempt event listener.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function attempting($callback)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->attempting($callback);\n }\n\n /**\n * Get the last user we attempted to authenticate.\n *\n * @return \\Jiminny\\Models\\User\n * @static\n */\n public static function getLastAttempted()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getLastAttempted();\n }\n\n /**\n * Get a unique identifier for the auth session value.\n *\n * @return string\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getName();\n }\n\n /**\n * Get the name of the cookie used to store the \"recaller\".\n *\n * @return string\n * @static\n */\n public static function getRecallerName()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getRecallerName();\n }\n\n /**\n * Determine if the user was authenticated via \"remember me\" cookie.\n *\n * @return bool\n * @static\n */\n public static function viaRemember()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->viaRemember();\n }\n\n /**\n * Set the number of minutes the remember me cookie should be valid for.\n *\n * @param int $minutes\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setRememberDuration($minutes)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setRememberDuration($minutes);\n }\n\n /**\n * Get the cookie creator instance used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Cookie\\QueueingFactory\n * @throws \\RuntimeException\n * @static\n */\n public static function getCookieJar()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getCookieJar();\n }\n\n /**\n * Set the cookie creator instance used by the guard.\n *\n * @param \\Illuminate\\Contracts\\Cookie\\QueueingFactory $cookie\n * @return void\n * @static\n */\n public static function setCookieJar($cookie)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setCookieJar($cookie);\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setDispatcher($events)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setDispatcher($events);\n }\n\n /**\n * Get the session store used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Session\\Session\n * @static\n */\n public static function getSession()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getSession();\n }\n\n /**\n * Return the currently cached user.\n *\n * @return \\Jiminny\\Models\\User|null\n * @static\n */\n public static function getUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getUser();\n }\n\n /**\n * Set the current user.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable $user\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setUser($user)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setUser($user);\n }\n\n /**\n * Get the current request instance.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Request\n * @static\n */\n public static function getRequest()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getRequest();\n }\n\n /**\n * Set the current request instance.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setRequest($request)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setRequest($request);\n }\n\n /**\n * Get the timebox instance used by the guard.\n *\n * @return \\Illuminate\\Support\\Timebox\n * @static\n */\n public static function getTimebox()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getTimebox();\n }\n\n /**\n * Determine if the current user is authenticated. If not, throw an exception.\n *\n * @return \\Jiminny\\Models\\User\n * @throws \\Illuminate\\Auth\\AuthenticationException\n * @static\n */\n public static function authenticate()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->authenticate();\n }\n\n /**\n * Determine if the guard has a user instance.\n *\n * @return bool\n * @static\n */\n public static function hasUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->hasUser();\n }\n\n /**\n * Determine if the current user is authenticated.\n *\n * @return bool\n * @static\n */\n public static function check()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->check();\n }\n\n /**\n * Determine if the current user is a guest.\n *\n * @return bool\n * @static\n */\n public static function guest()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->guest();\n }\n\n /**\n * Forget the current user.\n *\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function forgetUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->forgetUser();\n }\n\n /**\n * Get the user provider used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Auth\\UserProvider\n * @static\n */\n public static function getProvider()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getProvider();\n }\n\n /**\n * Set the user provider used by the guard.\n *\n * @param \\Illuminate\\Contracts\\Auth\\UserProvider $provider\n * @return void\n * @static\n */\n public static function setProvider($provider)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setProvider($provider);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Auth\\SessionGuard::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Auth\\SessionGuard::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Auth\\SessionGuard::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Auth\\SessionGuard::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\View\\Compilers\\BladeCompiler\n */\n class Blade {\n /**\n * Compile the view at the given path.\n *\n * @param string|null $path\n * @return void\n * @static\n */\n public static function compile($path = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->compile($path);\n }\n\n /**\n * Get the path currently being compiled.\n *\n * @return string\n * @static\n */\n public static function getPath()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getPath();\n }\n\n /**\n * Set the path currently being compiled.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function setPath($path)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->setPath($path);\n }\n\n /**\n * Compile the given Blade template contents.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function compileString($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileString($value);\n }\n\n /**\n * Evaluate and render a Blade string to HTML.\n *\n * @param string $string\n * @param array $data\n * @param bool $deleteCachedView\n * @return string\n * @static\n */\n public static function render($string, $data = [], $deleteCachedView = false)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::render($string, $data, $deleteCachedView);\n }\n\n /**\n * Render a component instance to HTML.\n *\n * @param \\Illuminate\\View\\Component $component\n * @return string\n * @static\n */\n public static function renderComponent($component)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::renderComponent($component);\n }\n\n /**\n * Strip the parentheses from the given expression.\n *\n * @param string $expression\n * @return string\n * @static\n */\n public static function stripParentheses($expression)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->stripParentheses($expression);\n }\n\n /**\n * Register a custom Blade compiler.\n *\n * @param callable $compiler\n * @return void\n * @static\n */\n public static function extend($compiler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->extend($compiler);\n }\n\n /**\n * Get the extensions used by the compiler.\n *\n * @return array\n * @static\n */\n public static function getExtensions()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getExtensions();\n }\n\n /**\n * Register an \"if\" statement directive.\n *\n * @param string $name\n * @param callable $callback\n * @return void\n * @static\n */\n public static function if($name, $callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->if($name, $callback);\n }\n\n /**\n * Check the result of a condition.\n *\n * @param string $name\n * @param mixed $parameters\n * @return bool\n * @static\n */\n public static function check($name, ...$parameters)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->check($name, ...$parameters);\n }\n\n /**\n * Register a class-based component alias directive.\n *\n * @param string $class\n * @param string|null $alias\n * @param string $prefix\n * @return void\n * @static\n */\n public static function component($class, $alias = null, $prefix = '')\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->component($class, $alias, $prefix);\n }\n\n /**\n * Register an array of class-based components.\n *\n * @param array $components\n * @param string $prefix\n * @return void\n * @static\n */\n public static function components($components, $prefix = '')\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->components($components, $prefix);\n }\n\n /**\n * Get the registered class component aliases.\n *\n * @return array\n * @static\n */\n public static function getClassComponentAliases()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getClassComponentAliases();\n }\n\n /**\n * Register a new anonymous component path.\n *\n * @param string $path\n * @param string|null $prefix\n * @return void\n * @static\n */\n public static function anonymousComponentPath($path, $prefix = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->anonymousComponentPath($path, $prefix);\n }\n\n /**\n * Register an anonymous component namespace.\n *\n * @param string $directory\n * @param string|null $prefix\n * @return void\n * @static\n */\n public static function anonymousComponentNamespace($directory, $prefix = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->anonymousComponentNamespace($directory, $prefix);\n }\n\n /**\n * Register a class-based component namespace.\n *\n * @param string $namespace\n * @param string $prefix\n * @return void\n * @static\n */\n public static function componentNamespace($namespace, $prefix)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->componentNamespace($namespace, $prefix);\n }\n\n /**\n * Get the registered anonymous component paths.\n *\n * @return array\n * @static\n */\n public static function getAnonymousComponentPaths()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getAnonymousComponentPaths();\n }\n\n /**\n * Get the registered anonymous component namespaces.\n *\n * @return array\n * @static\n */\n public static function getAnonymousComponentNamespaces()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getAnonymousComponentNamespaces();\n }\n\n /**\n * Get the registered class component namespaces.\n *\n * @return array\n * @static\n */\n public static function getClassComponentNamespaces()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getClassComponentNamespaces();\n }\n\n /**\n * Register a component alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function aliasComponent($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->aliasComponent($path, $alias);\n }\n\n /**\n * Register an include alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function include($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->include($path, $alias);\n }\n\n /**\n * Register an include alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function aliasInclude($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->aliasInclude($path, $alias);\n }\n\n /**\n * Register a handler for custom directives, binding the handler to the compiler.\n *\n * @param string $name\n * @param callable $handler\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function bindDirective($name, $handler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->bindDirective($name, $handler);\n }\n\n /**\n * Register a handler for custom directives.\n *\n * @param string $name\n * @param callable $handler\n * @param bool $bind\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function directive($name, $handler, $bind = false)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->directive($name, $handler, $bind);\n }\n\n /**\n * Get the list of custom directives.\n *\n * @return array\n * @static\n */\n public static function getCustomDirectives()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getCustomDirectives();\n }\n\n /**\n * Indicate that the following callable should be used to prepare strings for compilation.\n *\n * @param callable $callback\n * @return \\Illuminate\\View\\Compilers\\BladeCompiler\n * @static\n */\n public static function prepareStringsForCompilationUsing($callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->prepareStringsForCompilationUsing($callback);\n }\n\n /**\n * Register a new precompiler.\n *\n * @param callable $precompiler\n * @return void\n * @static\n */\n public static function precompiler($precompiler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->precompiler($precompiler);\n }\n\n /**\n * Execute the given callback using a custom echo format.\n *\n * @param string $format\n * @param callable $callback\n * @return string\n * @static\n */\n public static function usingEchoFormat($format, $callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->usingEchoFormat($format, $callback);\n }\n\n /**\n * Set the echo format to be used by the compiler.\n *\n * @param string $format\n * @return void\n * @static\n */\n public static function setEchoFormat($format)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->setEchoFormat($format);\n }\n\n /**\n * Set the \"echo\" format to double encode entities.\n *\n * @return void\n * @static\n */\n public static function withDoubleEncoding()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withDoubleEncoding();\n }\n\n /**\n * Set the \"echo\" format to not double encode entities.\n *\n * @return void\n * @static\n */\n public static function withoutDoubleEncoding()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withoutDoubleEncoding();\n }\n\n /**\n * Indicate that component tags should not be compiled.\n *\n * @return void\n * @static\n */\n public static function withoutComponentTags()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withoutComponentTags();\n }\n\n /**\n * Get the path to the compiled version of a view.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function getCompiledPath($path)\n {\n //Method inherited from \\Illuminate\\View\\Compilers\\Compiler \n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getCompiledPath($path);\n }\n\n /**\n * Determine if the view at the given path is expired.\n *\n * @param string $path\n * @return bool\n * @throws \\ErrorException\n * @static\n */\n public static function isExpired($path)\n {\n //Method inherited from \\Illuminate\\View\\Compilers\\Compiler \n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->isExpired($path);\n }\n\n /**\n * Get a new component hash for a component name.\n *\n * @param string $component\n * @return string\n * @static\n */\n public static function newComponentHash($component)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::newComponentHash($component);\n }\n\n /**\n * Compile a class component opening.\n *\n * @param string $component\n * @param string $alias\n * @param string $data\n * @param string $hash\n * @return string\n * @static\n */\n public static function compileClassComponentOpening($component, $alias, $data, $hash)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::compileClassComponentOpening($component, $alias, $data, $hash);\n }\n\n /**\n * Compile the end-component statements into valid PHP.\n *\n * @return string\n * @static\n */\n public static function compileEndComponentClass()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEndComponentClass();\n }\n\n /**\n * Sanitize the given component attribute value.\n *\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function sanitizeComponentAttribute($value)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::sanitizeComponentAttribute($value);\n }\n\n /**\n * Compile an end-once block into valid PHP.\n *\n * @return string\n * @static\n */\n public static function compileEndOnce()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEndOnce();\n }\n\n /**\n * Add a handler to be executed before echoing a given class.\n *\n * @param string|callable $class\n * @param callable|null $handler\n * @return void\n * @static\n */\n public static function stringable($class, $handler = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->stringable($class, $handler);\n }\n\n /**\n * Compile Blade echos into valid PHP.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function compileEchos($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEchos($value);\n }\n\n /**\n * Apply the echo handler for the value if it exists.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function applyEchoHandler($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->applyEchoHandler($value);\n }\n\n }\n /**\n * @method static mixed auth(\\Illuminate\\Http\\Request $request)\n * @method static mixed validAuthenticationResponse(\\Illuminate\\Http\\Request $request, mixed $result)\n * @method static void broadcast(array $channels, string $event, array $payload = [])\n * @method static array|null resolveAuthenticatedUser(\\Illuminate\\Http\\Request $request)\n * @method static void resolveAuthenticatedUserUsing(\\Closure $callback)\n * @method static \\Illuminate\\Broadcasting\\Broadcasters\\Broadcaster channel(\\Illuminate\\Contracts\\Broadcasting\\HasBroadcastChannel|string $channel, callable|string $callback, array $options = [])\n * @method static \\Illuminate\\Support\\Collection getChannels()\n * @see \\Illuminate\\Broadcasting\\BroadcastManager\n * @see \\Illuminate\\Broadcasting\\Broadcasters\\Broadcaster\n */\n class Broadcast {\n /**\n * Register the routes for handling broadcast channel authentication and sockets.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function routes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->routes($attributes);\n }\n\n /**\n * Register the routes for handling broadcast user authentication.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function userRoutes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->userRoutes($attributes);\n }\n\n /**\n * Register the routes for handling broadcast authentication and sockets.\n * \n * Alias of \"routes\" method.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function channelRoutes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->channelRoutes($attributes);\n }\n\n /**\n * Get the socket ID for the given request.\n *\n * @param \\Illuminate\\Http\\Request|null $request\n * @return string|null\n * @static\n */\n public static function socket($request = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->socket($request);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given channels.\n *\n * @static\n */\n public static function on($channels)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->on($channels);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given private channels.\n *\n * @static\n */\n public static function private($channel)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->private($channel);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given presence channels.\n *\n * @static\n */\n public static function presence($channel)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->presence($channel);\n }\n\n /**\n * Begin broadcasting an event.\n *\n * @param mixed $event\n * @return \\Illuminate\\Broadcasting\\PendingBroadcast\n * @static\n */\n public static function event($event = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->event($event);\n }\n\n /**\n * Queue the given event for broadcast.\n *\n * @param mixed $event\n * @return void\n * @static\n */\n public static function queue($event)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->queue($event);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @static\n */\n public static function connection($driver = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->connection($driver);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function driver($name = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->driver($name);\n }\n\n /**\n * Get a Pusher instance for the given configuration.\n *\n * @param array $config\n * @return \\Pusher\\Pusher\n * @static\n */\n public static function pusher($config)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->pusher($config);\n }\n\n /**\n * Get an Ably instance for the given configuration.\n *\n * @param array $config\n * @return \\Ably\\AblyRest\n * @static\n */\n public static function ably($config)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->ably($config);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Disconnect the given disk and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function forgetDrivers()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->forgetDrivers();\n }\n\n }\n /**\n * @see \\Illuminate\\Bus\\Dispatcher\n * @see \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n */\n class Bus {\n /**\n * Dispatch a command to its appropriate handler.\n *\n * @param mixed $command\n * @return mixed\n * @static\n */\n public static function dispatch($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatch($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler in the current process.\n * \n * Queueable jobs will be dispatched to the \"sync\" queue.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return mixed\n * @static\n */\n public static function dispatchSync($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchSync($command, $handler);\n }\n\n /**\n * Dispatch a command to its appropriate handler in the current process without using the synchronous queue.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return mixed\n * @static\n */\n public static function dispatchNow($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchNow($command, $handler);\n }\n\n /**\n * Attempt to find the batch with the given ID.\n *\n * @param string $batchId\n * @return \\Illuminate\\Bus\\Batch|null\n * @static\n */\n public static function findBatch($batchId)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->findBatch($batchId);\n }\n\n /**\n * Create a new batch of queueable jobs.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $jobs\n * @return \\Illuminate\\Bus\\PendingBatch\n * @static\n */\n public static function batch($jobs)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->batch($jobs);\n }\n\n /**\n * Create a new chain of queueable jobs.\n *\n * @param \\Illuminate\\Support\\Collection|array|null $jobs\n * @return \\Illuminate\\Foundation\\Bus\\PendingChain\n * @static\n */\n public static function chain($jobs = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->chain($jobs);\n }\n\n /**\n * Determine if the given command has a handler.\n *\n * @param mixed $command\n * @return bool\n * @static\n */\n public static function hasCommandHandler($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->hasCommandHandler($command);\n }\n\n /**\n * Retrieve the handler for a command.\n *\n * @param mixed $command\n * @return mixed\n * @static\n */\n public static function getCommandHandler($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->getCommandHandler($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler behind a queue.\n *\n * @param mixed $command\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function dispatchToQueue($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchToQueue($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler after the current process.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return void\n * @static\n */\n public static function dispatchAfterResponse($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n $instance->dispatchAfterResponse($command, $handler);\n }\n\n /**\n * Set the pipes through which commands should be piped before dispatching.\n *\n * @param array $pipes\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function pipeThrough($pipes)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->pipeThrough($pipes);\n }\n\n /**\n * Map a command to a handler.\n *\n * @param array $map\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function map($map)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->map($map);\n }\n\n /**\n * Allow dispatching after responses.\n *\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function withDispatchingAfterResponses()\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->withDispatchingAfterResponses();\n }\n\n /**\n * Disable dispatching after responses.\n *\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function withoutDispatchingAfterResponses()\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->withoutDispatchingAfterResponses();\n }\n\n /**\n * Specify the jobs that should be dispatched instead of faked.\n *\n * @param array|string $jobsToDispatch\n * @return \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n * @static\n */\n public static function except($jobsToDispatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->except($jobsToDispatch);\n }\n\n /**\n * Assert if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatched($command, $callback);\n }\n\n /**\n * Assert if a job was pushed exactly once.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedOnce($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedOnce($command);\n }\n\n /**\n * Assert if a job was pushed a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatched($command, $callback);\n }\n\n /**\n * Assert that no jobs were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingDispatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingDispatched();\n }\n\n /**\n * Assert if a job was explicitly dispatched synchronously based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedSync($command, $callback);\n }\n\n /**\n * Assert if a job was pushed synchronously a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedSyncTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedSyncTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatchedSync($command, $callback);\n }\n\n /**\n * Assert if a job was dispatched after the response was sent based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Assert if a job was pushed after the response was sent a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedAfterResponseTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedAfterResponseTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Assert if a chain of jobs was dispatched.\n *\n * @param array $expectedChain\n * @return void\n * @static\n */\n public static function assertChained($expectedChain)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertChained($expectedChain);\n }\n\n /**\n * Assert no chained jobs was dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingChained()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingChained();\n }\n\n /**\n * Assert if a job was dispatched with an empty chain based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedWithoutChain($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedWithoutChain($command, $callback);\n }\n\n /**\n * Create a new assertion about a chained batch.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Support\\Testing\\Fakes\\ChainedBatchTruthTest\n * @static\n */\n public static function chainedBatch($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->chainedBatch($callback);\n }\n\n /**\n * Assert if a batch was dispatched based on a truth-test callback.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function assertBatched($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertBatched($callback);\n }\n\n /**\n * Assert the number of batches that have been dispatched.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertBatchCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertBatchCount($count);\n }\n\n /**\n * Assert that no batched jobs were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingBatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingBatched();\n }\n\n /**\n * Assert that no jobs were dispatched, chained, or batched.\n *\n * @return void\n * @static\n */\n public static function assertNothingPlaced()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingPlaced();\n }\n\n /**\n * Get all of the jobs matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatched($command, $callback);\n }\n\n /**\n * Get all of the jobs dispatched synchronously matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedSync($command, $callback);\n }\n\n /**\n * Get all of the jobs dispatched after the response was sent matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Get all of the pending batches matching a truth-test callback.\n *\n * @param callable $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function batched($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->batched($callback);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatched($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatched($command);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatchedSync($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatchedSync($command);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatchedAfterResponse($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatchedAfterResponse($command);\n }\n\n /**\n * Dispatch an empty job batch for testing.\n *\n * @param string $name\n * @return \\Illuminate\\Bus\\Batch\n * @static\n */\n public static function dispatchFakeBatch($name = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchFakeBatch($name);\n }\n\n /**\n * Record the fake pending batch dispatch.\n *\n * @param \\Illuminate\\Bus\\PendingBatch $pendingBatch\n * @return \\Illuminate\\Bus\\Batch\n * @static\n */\n public static function recordPendingBatch($pendingBatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->recordPendingBatch($pendingBatch);\n }\n\n /**\n * Specify if commands should be serialized and restored when being batched.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the batches that have been dispatched.\n *\n * @return array\n * @static\n */\n public static function dispatchedBatches()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedBatches();\n }\n\n }\n /**\n * @see \\Illuminate\\Cache\\CacheManager\n * @see \\Illuminate\\Cache\\Repository\n */\n class Cache {\n /**\n * Get a cache store instance by name, wrapped in a repository.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function store($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->store($name);\n }\n\n /**\n * Get a cache driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Get a memoized cache driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function memo($driver = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->memo($driver);\n }\n\n /**\n * Resolve the given store.\n *\n * @param string $name\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function resolve($name)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->resolve($name);\n }\n\n /**\n * Build a cache repository with the given configuration.\n *\n * @param array $config\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new cache repository with the given implementation.\n *\n * @param \\Illuminate\\Contracts\\Cache\\Store $store\n * @param array $config\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function repository($store, $config = [])\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->repository($store, $config);\n }\n\n /**\n * Re-set the event dispatcher on all resolved cache repositories.\n *\n * @return void\n * @static\n */\n public static function refreshEventDispatcher()\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->refreshEventDispatcher();\n }\n\n /**\n * Get the default cache driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default cache driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Unset the given driver instances.\n *\n * @param array|string|null $name\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function forgetDriver($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->forgetDriver($name);\n }\n\n /**\n * Disconnect the given driver and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Determine if an item exists in the cache.\n *\n * @param array|string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if an item doesn't exist in the cache.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->missing($key);\n }\n\n /**\n * Retrieve an item from the cache by key.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Retrieve multiple items from the cache by key.\n * \n * Items not found in the cache will have a null value.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function many($keys)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->many($keys);\n }\n\n /**\n * Obtains multiple cache items by their unique keys.\n *\n * @return iterable\n * @param iterable<string> $keys A list of keys that can be obtained in a single operation.\n * @param mixed $default Default value to return for keys that do not exist.\n * @return iterable<string, mixed> A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $keys is neither an array nor a Traversable,\n * or if any of the $keys are not a legal value.\n * @static\n */\n public static function getMultiple($keys, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getMultiple($keys, $default);\n }\n\n /**\n * Retrieve an item from the cache and delete it.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Store an item in the cache.\n *\n * @param array|string $key\n * @param mixed $value\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function put($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->put($key, $value, $ttl);\n }\n\n /**\n * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.\n *\n * @return bool\n * @param string $key The key of the item to store.\n * @param mixed $value The value of the item to store, must be serializable.\n * @param null|int|\\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and\n * the driver supports TTL then the library may set a default value\n * for it or let the driver take care of that.\n * @return bool True on success and false on failure.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if the $key string is not a legal value.\n * @static\n */\n public static function set($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->set($key, $value, $ttl);\n }\n\n /**\n * Store multiple items in the cache for a given number of seconds.\n *\n * @param array $values\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function putMany($values, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->putMany($values, $ttl);\n }\n\n /**\n * Persists a set of key => value pairs in the cache, with an optional TTL.\n *\n * @return bool\n * @param iterable $values A list of key => value pairs for a multiple-set operation.\n * @param null|int|\\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and\n * the driver supports TTL then the library may set a default value\n * for it or let the driver take care of that.\n * @return bool True on success and false on failure.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $values is neither an array nor a Traversable,\n * or if any of the $values are not a legal value.\n * @static\n */\n public static function setMultiple($values, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setMultiple($values, $ttl);\n }\n\n /**\n * Store an item in the cache if the key does not exist.\n *\n * @param string $key\n * @param mixed $value\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function add($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->add($key, $value, $ttl);\n }\n\n /**\n * Increment the value of an item in the cache.\n *\n * @param string $key\n * @param mixed $value\n * @return int|bool\n * @static\n */\n public static function increment($key, $value = 1)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->increment($key, $value);\n }\n\n /**\n * Decrement the value of an item in the cache.\n *\n * @param string $key\n * @param mixed $value\n * @return int|bool\n * @static\n */\n public static function decrement($key, $value = 1)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->decrement($key, $value);\n }\n\n /**\n * Store an item in the cache indefinitely.\n *\n * @param string $key\n * @param mixed $value\n * @return bool\n * @static\n */\n public static function forever($key, $value)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->forever($key, $value);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure|\\DateTimeInterface|\\DateInterval|int|null $ttl\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function remember($key, $ttl, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->remember($key, $ttl, $callback);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result forever.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function sear($key, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->sear($key, $callback);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result forever.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function rememberForever($key, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->rememberForever($key, $callback);\n }\n\n /**\n * Retrieve an item from the cache by key, refreshing it in the background if it is stale.\n *\n * @template TCacheValue\n * @param string $key\n * @param array{ 0: \\DateTimeInterface|\\DateInterval|int, 1: \\DateTimeInterface|\\DateInterval|int } $ttl\n * @param (callable(): TCacheValue) $callback\n * @param array{ seconds?: int, owner?: string }|null $lock\n * @param bool $alwaysDefer\n * @return TCacheValue\n * @static\n */\n public static function flexible($key, $ttl, $callback, $lock = null, $alwaysDefer = false)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->flexible($key, $ttl, $callback, $lock, $alwaysDefer);\n }\n\n /**\n * Remove an item from the cache.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function forget($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->forget($key);\n }\n\n /**\n * Delete an item from the cache by its unique key.\n *\n * @return bool\n * @param string $key The unique cache key of the item to delete.\n * @return bool True if the item was successfully removed. False if there was an error.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if the $key string is not a legal value.\n * @static\n */\n public static function delete($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->delete($key);\n }\n\n /**\n * Deletes multiple cache items in a single operation.\n *\n * @return bool\n * @param iterable<string> $keys A list of string-based keys to be deleted.\n * @return bool True if the items were successfully removed. False if there was an error.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $keys is neither an array nor a Traversable,\n * or if any of the $keys are not a legal value.\n * @static\n */\n public static function deleteMultiple($keys)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->deleteMultiple($keys);\n }\n\n /**\n * Wipes clean the entire cache's keys.\n *\n * @return bool\n * @return bool True on success and false on failure.\n * @static\n */\n public static function clear()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->clear();\n }\n\n /**\n * Begin executing a new tags operation if the store supports it.\n *\n * @param mixed $names\n * @return \\Illuminate\\Cache\\TaggedCache\n * @throws \\BadMethodCallException\n * @static\n */\n public static function tags($names)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->tags($names);\n }\n\n /**\n * Get the name of the cache store.\n *\n * @return string|null\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getName();\n }\n\n /**\n * Determine if the current store supports tags.\n *\n * @return bool\n * @static\n */\n public static function supportsTags()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->supportsTags();\n }\n\n /**\n * Get the default cache time.\n *\n * @return int|null\n * @static\n */\n public static function getDefaultCacheTime()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getDefaultCacheTime();\n }\n\n /**\n * Set the default cache time in seconds.\n *\n * @param int|null $seconds\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function setDefaultCacheTime($seconds)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setDefaultCacheTime($seconds);\n }\n\n /**\n * Get the cache store implementation.\n *\n * @return \\Illuminate\\Contracts\\Cache\\Store\n * @static\n */\n public static function getStore()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getStore();\n }\n\n /**\n * Set the cache store implementation.\n *\n * @param \\Illuminate\\Contracts\\Cache\\Store $store\n * @return static\n * @static\n */\n public static function setStore($store)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setStore($store);\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher|null\n * @static\n */\n public static function getEventDispatcher()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getEventDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setEventDispatcher($events)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->setEventDispatcher($events);\n }\n\n /**\n * Determine if a cached value exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Retrieve an item from the cache by key.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Store an item in the cache for the default time.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Remove an item from the cache.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Cache\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Cache\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Cache\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Cache\\Repository::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Get a lock instance.\n *\n * @param string $name\n * @param int $seconds\n * @param string|null $owner\n * @return \\Illuminate\\Contracts\\Cache\\Lock\n * @static\n */\n public static function lock($name, $seconds = 0, $owner = null)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->lock($name, $seconds, $owner);\n }\n\n /**\n * Restore a lock instance using the owner identifier.\n *\n * @param string $name\n * @param string $owner\n * @return \\Illuminate\\Contracts\\Cache\\Lock\n * @static\n */\n public static function restoreLock($name, $owner)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->restoreLock($name, $owner);\n }\n\n /**\n * Remove all items from the cache.\n *\n * @return bool\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->flush();\n }\n\n /**\n * Remove all expired tag set entries.\n *\n * @return void\n * @static\n */\n public static function flushStaleTags()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->flushStaleTags();\n }\n\n /**\n * Get the Redis connection instance.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function connection()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->connection();\n }\n\n /**\n * Get the Redis connection instance that should be used to manage locks.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function lockConnection()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->lockConnection();\n }\n\n /**\n * Specify the name of the connection that should be used to store data.\n *\n * @param string $connection\n * @return void\n * @static\n */\n public static function setConnection($connection)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->setConnection($connection);\n }\n\n /**\n * Specify the name of the connection that should be used to manage locks.\n *\n * @param string $connection\n * @return \\Illuminate\\Cache\\RedisStore\n * @static\n */\n public static function setLockConnection($connection)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->setLockConnection($connection);\n }\n\n /**\n * Get the Redis database instance.\n *\n * @return \\Illuminate\\Contracts\\Redis\\Factory\n * @static\n */\n public static function getRedis()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->getRedis();\n }\n\n /**\n * Get the cache key prefix.\n *\n * @return string\n * @static\n */\n public static function getPrefix()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->getPrefix();\n }\n\n /**\n * Set the cache key prefix.\n *\n * @param string $prefix\n * @return void\n * @static\n */\n public static function setPrefix($prefix)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->setPrefix($prefix);\n }\n\n }\n /**\n * @method static array run(\\Closure|array $tasks)\n * @method static \\Illuminate\\Support\\Defer\\DeferredCallback defer(\\Closure|array $tasks)\n * @see \\Illuminate\\Concurrency\\ConcurrencyManager\n */\n class Concurrency {\n /**\n * Get a driver instance by name.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function driver($name = null)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->driver($name);\n }\n\n /**\n * Create an instance of the process concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\ProcessDriver\n * @static\n */\n public static function createProcessDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createProcessDriver($config);\n }\n\n /**\n * Create an instance of the fork concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\ForkDriver\n * @throws \\RuntimeException\n * @static\n */\n public static function createForkDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createForkDriver($config);\n }\n\n /**\n * Create an instance of the sync concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\SyncDriver\n * @static\n */\n public static function createSyncDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createSyncDriver($config);\n }\n\n /**\n * Get the default instance name.\n *\n * @return string\n * @static\n */\n public static function getDefaultInstance()\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->getDefaultInstance();\n }\n\n /**\n * Set the default instance name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultInstance($name)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n $instance->setDefaultInstance($name);\n }\n\n /**\n * Get the instance specific configuration.\n *\n * @param string $name\n * @return array\n * @static\n */\n public static function getInstanceConfig($name)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->getInstanceConfig($name);\n }\n\n /**\n * Get an instance by name.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function instance($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->instance($name);\n }\n\n /**\n * Unset the given instances.\n *\n * @param array|string|null $name\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function forgetInstance($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->forgetInstance($name);\n }\n\n /**\n * Disconnect the given instance and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom instance creator Closure.\n *\n * @param string $name\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function extend($name, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->extend($name, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function setApplication($app)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->setApplication($app);\n }\n\n }\n /**\n * @see \\Illuminate\\Config\\Repository\n */\n class Config {\n /**\n * Determine if the given configuration value exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Get the specified configuration value.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get many configuration values.\n *\n * @param array<string|int,mixed> $keys\n * @return array<string,mixed>\n * @static\n */\n public static function getMany($keys)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->getMany($keys);\n }\n\n /**\n * Get the specified string configuration value.\n *\n * @param string $key\n * @param (\\Closure():(string|null))|string|null $default\n * @return string\n * @static\n */\n public static function string($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->string($key, $default);\n }\n\n /**\n * Get the specified integer configuration value.\n *\n * @param string $key\n * @param (\\Closure():(int|null))|int|null $default\n * @return int\n * @static\n */\n public static function integer($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->integer($key, $default);\n }\n\n /**\n * Get the specified float configuration value.\n *\n * @param string $key\n * @param (\\Closure():(float|null))|float|null $default\n * @return float\n * @static\n */\n public static function float($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->float($key, $default);\n }\n\n /**\n * Get the specified boolean configuration value.\n *\n * @param string $key\n * @param (\\Closure():(bool|null))|bool|null $default\n * @return bool\n * @static\n */\n public static function boolean($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->boolean($key, $default);\n }\n\n /**\n * Get the specified array configuration value.\n *\n * @param string $key\n * @param (\\Closure():(array<array-key, mixed>|null))|array<array-key, mixed>|null $default\n * @return array<array-key, mixed>\n * @static\n */\n public static function array($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->array($key, $default);\n }\n\n /**\n * Get the specified array configuration value as a collection.\n *\n * @param string $key\n * @param (\\Closure():(array<array-key, mixed>|null))|array<array-key, mixed>|null $default\n * @return Collection<array-key, mixed>\n * @static\n */\n public static function collection($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->collection($key, $default);\n }\n\n /**\n * Set a given configuration value.\n *\n * @param array|string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function set($key, $value = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->set($key, $value);\n }\n\n /**\n * Prepend a value onto an array configuration value.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function prepend($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->prepend($key, $value);\n }\n\n /**\n * Push a value onto an array configuration value.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function push($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->push($key, $value);\n }\n\n /**\n * Get all of the configuration items for the application.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->all();\n }\n\n /**\n * Determine if the given configuration option exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Get a configuration option.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Set a configuration option.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Unset a configuration option.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Config\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Config\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Config\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Config\\Repository::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Log\\Context\\Repository\n */\n class Context {\n /**\n * Determine if the given key exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if the given key is missing.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->missing($key);\n }\n\n /**\n * Determine if the given key exists within the hidden context data.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hasHidden($key);\n }\n\n /**\n * Determine if the given key is missing within the hidden context data.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missingHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->missingHidden($key);\n }\n\n /**\n * Retrieve all the context data.\n *\n * @return array<string, mixed>\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->all();\n }\n\n /**\n * Retrieve all the hidden context data.\n *\n * @return array<string, mixed>\n * @static\n */\n public static function allHidden()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->allHidden();\n }\n\n /**\n * Retrieve the given key's value.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Retrieve the given key's hidden value.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getHidden($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->getHidden($key, $default);\n }\n\n /**\n * Retrieve the given key's value and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Retrieve the given key's hidden value and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pullHidden($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pullHidden($key, $default);\n }\n\n /**\n * Retrieve only the values of the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->only($keys);\n }\n\n /**\n * Retrieve only the hidden values of the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function onlyHidden($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->onlyHidden($keys);\n }\n\n /**\n * Retrieve all values except those with the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->except($keys);\n }\n\n /**\n * Retrieve all hidden values except those with the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function exceptHidden($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->exceptHidden($keys);\n }\n\n /**\n * Add a context value.\n *\n * @param string|array<string, mixed> $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function add($key, $value = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->add($key, $value);\n }\n\n /**\n * Add a hidden context value.\n *\n * @param string|array<string, mixed> $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addHidden($key, $value = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addHidden($key, $value);\n }\n\n /**\n * Add a context value if it does not exist yet, and return the value.\n *\n * @param string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function remember($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->remember($key, $value);\n }\n\n /**\n * Add a hidden context value if it does not exist yet, and return the value.\n *\n * @param string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function rememberHidden($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->rememberHidden($key, $value);\n }\n\n /**\n * Forget the given context key.\n *\n * @param string|array<int, string> $key\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function forget($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->forget($key);\n }\n\n /**\n * Forget the given hidden context key.\n *\n * @param string|array<int, string> $key\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function forgetHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->forgetHidden($key);\n }\n\n /**\n * Add a context value if it does not exist yet.\n *\n * @param string $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addIf($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addIf($key, $value);\n }\n\n /**\n * Add a hidden context value if it does not exist yet.\n *\n * @param string $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addHiddenIf($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addHiddenIf($key, $value);\n }\n\n /**\n * Push the given values onto the key's stack.\n *\n * @param string $key\n * @param mixed $values\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function push($key, ...$values)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->push($key, ...$values);\n }\n\n /**\n * Pop the latest value from the key's stack.\n *\n * @param string $key\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function pop($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pop($key);\n }\n\n /**\n * Push the given hidden values onto the key's stack.\n *\n * @param string $key\n * @param mixed $values\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function pushHidden($key, ...$values)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pushHidden($key, ...$values);\n }\n\n /**\n * Pop the latest hidden value from the key's stack.\n *\n * @param string $key\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function popHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->popHidden($key);\n }\n\n /**\n * Increment a context counter.\n *\n * @param string $key\n * @param int $amount\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function increment($key, $amount = 1)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->increment($key, $amount);\n }\n\n /**\n * Decrement a context counter.\n *\n * @param string $key\n * @param int $amount\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function decrement($key, $amount = 1)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->decrement($key, $amount);\n }\n\n /**\n * Determine if the given value is in the given stack.\n *\n * @param string $key\n * @param mixed $value\n * @param bool $strict\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function stackContains($key, $value, $strict = false)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->stackContains($key, $value, $strict);\n }\n\n /**\n * Determine if the given value is in the given hidden stack.\n *\n * @param string $key\n * @param mixed $value\n * @param bool $strict\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function hiddenStackContains($key, $value, $strict = false)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hiddenStackContains($key, $value, $strict);\n }\n\n /**\n * Run the callback function with the given context values and restore the original context state when complete.\n *\n * @param callable $callback\n * @param array<string, mixed> $data\n * @param array<string, mixed> $hidden\n * @return mixed\n * @throws \\Throwable\n * @static\n */\n public static function scope($callback, $data = [], $hidden = [])\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->scope($callback, $data, $hidden);\n }\n\n /**\n * Determine if the repository is empty.\n *\n * @return bool\n * @static\n */\n public static function isEmpty()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->isEmpty();\n }\n\n /**\n * Execute the given callback when context is about to be dehydrated.\n *\n * @param callable $callback\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function dehydrating($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->dehydrating($callback);\n }\n\n /**\n * Execute the given callback when context has been hydrated.\n *\n * @param callable $callback\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function hydrated($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hydrated($callback);\n }\n\n /**\n * Handle unserialize exceptions using the given callback.\n *\n * @param callable|null $callback\n * @return static\n * @static\n */\n public static function handleUnserializeExceptionsUsing($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->handleUnserializeExceptionsUsing($callback);\n }\n\n /**\n * Flush all context data.\n *\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->flush();\n }\n\n /**\n * Dehydrate the context data.\n *\n * @internal\n * @return \\Illuminate\\Log\\Context\\?array\n * @static\n */\n public static function dehydrate()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->dehydrate();\n }\n\n /**\n * Hydrate the context instance.\n *\n * @internal\n * @param \\Illuminate\\Log\\Context\\?array $context\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function hydrate($context)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hydrate($context);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Log\\Context\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Log\\Context\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Log\\Context\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Log\\Context\\Repository::flushMacros();\n }\n\n /**\n * Restore the model from the model identifier instance.\n *\n * @param \\Illuminate\\Contracts\\Database\\ModelIdentifier $value\n * @return \\Illuminate\\Database\\Eloquent\\Model\n * @static\n */\n public static function restoreModel($value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->restoreModel($value);\n }\n\n }\n /**\n * @see \\Illuminate\\Cookie\\CookieJar\n */\n class Cookie {\n /**\n * Create a new cookie instance.\n *\n * @param string $name\n * @param string $value\n * @param int $minutes\n * @param string|null $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param bool $httpOnly\n * @param bool $raw\n * @param string|null $sameSite\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->make($name, $value, $minutes, $path, $domain, $secure, $httpOnly, $raw, $sameSite);\n }\n\n /**\n * Create a cookie that lasts \"forever\" (400 days).\n *\n * @param string $name\n * @param string $value\n * @param string|null $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param bool $httpOnly\n * @param bool $raw\n * @param string|null $sameSite\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function forever($name, $value, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->forever($name, $value, $path, $domain, $secure, $httpOnly, $raw, $sameSite);\n }\n\n /**\n * Expire the given cookie.\n *\n * @param string $name\n * @param string|null $path\n * @param string|null $domain\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function forget($name, $path = null, $domain = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->forget($name, $path, $domain);\n }\n\n /**\n * Determine if a cookie has been queued.\n *\n * @param string $key\n * @param string|null $path\n * @return bool\n * @static\n */\n public static function hasQueued($key, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->hasQueued($key, $path);\n }\n\n /**\n * Get a queued cookie instance.\n *\n * @param string $key\n * @param mixed $default\n * @param string|null $path\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie|null\n * @static\n */\n public static function queued($key, $default = null, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->queued($key, $default, $path);\n }\n\n /**\n * Queue a cookie to send with the next response.\n *\n * @param mixed $parameters\n * @return void\n * @static\n */\n public static function queue(...$parameters)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->queue(...$parameters);\n }\n\n /**\n * Queue a cookie to expire with the next response.\n *\n * @param string $name\n * @param string|null $path\n * @param string|null $domain\n * @return void\n * @static\n */\n public static function expire($name, $path = null, $domain = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->expire($name, $path, $domain);\n }\n\n /**\n * Remove a cookie from the queue.\n *\n * @param string $name\n * @param string|null $path\n * @return void\n * @static\n */\n public static function unqueue($name, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->unqueue($name, $path);\n }\n\n /**\n * Set the default path and domain for the jar.\n *\n * @param string $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param string|null $sameSite\n * @return \\Illuminate\\Cookie\\CookieJar\n * @static\n */\n public static function setDefaultPathAndDomain($path, $domain, $secure = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->setDefaultPathAndDomain($path, $domain, $secure, $sameSite);\n }\n\n /**\n * Get the cookies which have been queued for the next request.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie[]\n * @static\n */\n public static function getQueuedCookies()\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->getQueuedCookies();\n }\n\n /**\n * Flush the cookies which have been queued for the next request.\n *\n * @return \\Illuminate\\Cookie\\CookieJar\n * @static\n */\n public static function flushQueuedCookies()\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->flushQueuedCookies();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Cookie\\CookieJar::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Cookie\\CookieJar::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Cookie\\CookieJar::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Cookie\\CookieJar::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Encryption\\Encrypter\n */\n class Crypt {\n /**\n * Determine if the given key and cipher combination is valid.\n *\n * @param string $key\n * @param string $cipher\n * @return bool\n * @static\n */\n public static function supported($key, $cipher)\n {\n return \\Illuminate\\Encryption\\Encrypter::supported($key, $cipher);\n }\n\n /**\n * Create a new encryption key for the given cipher.\n *\n * @param string $cipher\n * @return string\n * @static\n */\n public static function generateKey($cipher)\n {\n return \\Illuminate\\Encryption\\Encrypter::generateKey($cipher);\n }\n\n /**\n * Encrypt the given value.\n *\n * @param mixed $value\n * @param bool $serialize\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n * @static\n */\n public static function encrypt($value, $serialize = true)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->encrypt($value, $serialize);\n }\n\n /**\n * Encrypt a string without serialization.\n *\n * @param string $value\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n * @static\n */\n public static function encryptString($value)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->encryptString($value);\n }\n\n /**\n * Decrypt the given value.\n *\n * @param string $payload\n * @param bool $unserialize\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n * @static\n */\n public static function decrypt($payload, $unserialize = true)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->decrypt($payload, $unserialize);\n }\n\n /**\n * Decrypt the given string without unserialization.\n *\n * @param string $payload\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n * @static\n */\n public static function decryptString($payload)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->decryptString($payload);\n }\n\n /**\n * Get the encryption key that the encrypter is currently using.\n *\n * @return string\n * @static\n */\n public static function getKey()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getKey();\n }\n\n /**\n * Get the current encryption key and all previous encryption keys.\n *\n * @return array\n * @static\n */\n public static function getAllKeys()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getAllKeys();\n }\n\n /**\n * Get the previous encryption keys.\n *\n * @return array\n * @static\n */\n public static function getPreviousKeys()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getPreviousKeys();\n }\n\n /**\n * Set the previous / legacy encryption keys that should be utilized if decryption fails.\n *\n * @param array $keys\n * @return \\Illuminate\\Encryption\\Encrypter\n * @static\n */\n public static function previousKeys($keys)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->previousKeys($keys);\n }\n\n }\n /**\n * @see \\Illuminate\\Database\\DatabaseManager\n */\n class DB {\n /**\n * Get a database connection instance.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Build a database connection instance from the given configuration.\n *\n * @param array $config\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Calculate the dynamic connection name for an on-demand connection based on its configuration.\n *\n * @param array $config\n * @return string\n * @static\n */\n public static function calculateDynamicConnectionName($config)\n {\n return \\Illuminate\\Database\\DatabaseManager::calculateDynamicConnectionName($config);\n }\n\n /**\n * Get a database connection instance from the given configuration.\n *\n * @param \\UnitEnum|string $name\n * @param array $config\n * @param bool $force\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function connectUsing($name, $config, $force = false)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->connectUsing($name, $config, $force);\n }\n\n /**\n * Disconnect from the given database and remove from local cache.\n *\n * @param \\UnitEnum|string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Disconnect from the given database.\n *\n * @param \\UnitEnum|string|null $name\n * @return void\n * @static\n */\n public static function disconnect($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->disconnect($name);\n }\n\n /**\n * Reconnect to the given database.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function reconnect($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->reconnect($name);\n }\n\n /**\n * Set the default database connection for the callback execution.\n *\n * @param \\UnitEnum|string $name\n * @param callable $callback\n * @return mixed\n * @static\n */\n public static function usingConnection($name, $callback)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->usingConnection($name, $callback);\n }\n\n /**\n * Get the default connection name.\n *\n * @return string\n * @static\n */\n public static function getDefaultConnection()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->getDefaultConnection();\n }\n\n /**\n * Set the default connection name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultConnection($name)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->setDefaultConnection($name);\n }\n\n /**\n * Get all of the supported drivers.\n *\n * @return string[]\n * @static\n */\n public static function supportedDrivers()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->supportedDrivers();\n }\n\n /**\n * Get all of the drivers that are actually available.\n *\n * @return string[]\n * @static\n */\n public static function availableDrivers()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->availableDrivers();\n }\n\n /**\n * Register an extension connection resolver.\n *\n * @param string $name\n * @param callable $resolver\n * @return void\n * @static\n */\n public static function extend($name, $resolver)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->extend($name, $resolver);\n }\n\n /**\n * Remove an extension connection resolver.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function forgetExtension($name)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->forgetExtension($name);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array<string, \\Illuminate\\Database\\Connection>\n * @static\n */\n public static function getConnections()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->getConnections();\n }\n\n /**\n * Set the database reconnector callback.\n *\n * @param callable $reconnector\n * @return void\n * @static\n */\n public static function setReconnector($reconnector)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->setReconnector($reconnector);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Database\\DatabaseManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Database\\DatabaseManager::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Database\\DatabaseManager::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Database\\DatabaseManager::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Database\\DatabaseManager::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Get a human-readable name for the given connection driver.\n *\n * @return string\n * @static\n */\n public static function getDriverTitle()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDriverTitle();\n }\n\n /**\n * Determine if the connected database is a MariaDB database.\n *\n * @return bool\n * @static\n */\n public static function isMaria()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->isMaria();\n }\n\n /**\n * Get the server version for the connection.\n *\n * @return string\n * @static\n */\n public static function getServerVersion()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getServerVersion();\n }\n\n /**\n * Get a schema builder instance for the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\MariaDbBuilder\n * @static\n */\n public static function getSchemaBuilder()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaBuilder();\n }\n\n /**\n * Get the schema state for the connection.\n *\n * @param \\Illuminate\\Filesystem\\Filesystem|null $files\n * @param callable|null $processFactory\n * @return \\Illuminate\\Database\\Schema\\MariaDbSchemaState\n * @static\n */\n public static function getSchemaState($files = null, $processFactory = null)\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaState($files, $processFactory);\n }\n\n /**\n * Run an insert statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @param string|null $sequence\n * @return bool\n * @static\n */\n public static function insert($query, $bindings = [], $sequence = null)\n {\n //Method inherited from \\Illuminate\\Database\\MySqlConnection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->insert($query, $bindings, $sequence);\n }\n\n /**\n * Get the connection's last insert ID.\n *\n * @return string|int|null\n * @static\n */\n public static function getLastInsertId()\n {\n //Method inherited from \\Illuminate\\Database\\MySqlConnection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getLastInsertId();\n }\n\n /**\n * Set the query grammar to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultQueryGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultQueryGrammar();\n }\n\n /**\n * Set the schema grammar to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultSchemaGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultSchemaGrammar();\n }\n\n /**\n * Set the query post processor to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultPostProcessor()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultPostProcessor();\n }\n\n /**\n * Begin a fluent query against a database table.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|\\UnitEnum|string $table\n * @param string|null $as\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function table($table, $as = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->table($table, $as);\n }\n\n /**\n * Get a new query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function query()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->query();\n }\n\n /**\n * Run a select statement and return a single result.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return mixed\n * @static\n */\n public static function selectOne($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectOne($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement and return the first column of the first row.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return mixed\n * @throws \\Illuminate\\Database\\MultipleColumnsSelectedException\n * @static\n */\n public static function scalar($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->scalar($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return array\n * @static\n */\n public static function selectFromWriteConnection($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectFromWriteConnection($query, $bindings);\n }\n\n /**\n * Run a select statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return array\n * @static\n */\n public static function select($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->select($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database and returns all of the result sets.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return array\n * @static\n */\n public static function selectResultSets($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectResultSets($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database and returns a generator.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return \\Generator<int, \\stdClass>\n * @static\n */\n public static function cursor($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->cursor($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run an update statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function update($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->update($query, $bindings);\n }\n\n /**\n * Run a delete statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function delete($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->delete($query, $bindings);\n }\n\n /**\n * Execute an SQL statement and return the boolean result.\n *\n * @param string $query\n * @param array $bindings\n * @return bool\n * @static\n */\n public static function statement($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->statement($query, $bindings);\n }\n\n /**\n * Run an SQL statement and get the number of rows affected.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function affectingStatement($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->affectingStatement($query, $bindings);\n }\n\n /**\n * Run a raw, unprepared query against the PDO connection.\n *\n * @param string $query\n * @return bool\n * @static\n */\n public static function unprepared($query)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->unprepared($query);\n }\n\n /**\n * Get the number of open connections for the database.\n *\n * @return int|null\n * @static\n */\n public static function threadCount()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->threadCount();\n }\n\n /**\n * Execute the given callback in \"dry run\" mode.\n *\n * @param (\\Closure(\\Illuminate\\Database\\Connection): mixed) $callback\n * @return \\Illuminate\\Database\\array{query: string, bindings: array, time: float|null}[]\n * @static\n */\n public static function pretend($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->pretend($callback);\n }\n\n /**\n * Execute the given callback without \"pretending\".\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutPretending($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->withoutPretending($callback);\n }\n\n /**\n * Bind values to their parameters in the given statement.\n *\n * @param \\PDOStatement $statement\n * @param array $bindings\n * @return void\n * @static\n */\n public static function bindValues($statement, $bindings)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->bindValues($statement, $bindings);\n }\n\n /**\n * Prepare the query bindings for execution.\n *\n * @param array $bindings\n * @return array\n * @static\n */\n public static function prepareBindings($bindings)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->prepareBindings($bindings);\n }\n\n /**\n * Log a query in the connection's query log.\n *\n * @param string $query\n * @param array $bindings\n * @param float|null $time\n * @return void\n * @static\n */\n public static function logQuery($query, $bindings, $time = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->logQuery($query, $bindings, $time);\n }\n\n /**\n * Register a callback to be invoked when the connection queries for longer than a given amount of time.\n *\n * @param \\DateTimeInterface|\\Carbon\\CarbonInterval|float|int $threshold\n * @param (callable(\\Illuminate\\Database\\Connection, \\Illuminate\\Database\\Events\\QueryExecuted): mixed) $handler\n * @return void\n * @static\n */\n public static function whenQueryingForLongerThan($threshold, $handler)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->whenQueryingForLongerThan($threshold, $handler);\n }\n\n /**\n * Allow all the query duration handlers to run again, even if they have already run.\n *\n * @return void\n * @static\n */\n public static function allowQueryDurationHandlersToRunAgain()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->allowQueryDurationHandlersToRunAgain();\n }\n\n /**\n * Get the duration of all run queries in milliseconds.\n *\n * @return float\n * @static\n */\n public static function totalQueryDuration()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->totalQueryDuration();\n }\n\n /**\n * Reset the duration of all run queries.\n *\n * @return void\n * @static\n */\n public static function resetTotalQueryDuration()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->resetTotalQueryDuration();\n }\n\n /**\n * Reconnect to the database if a PDO connection is missing.\n *\n * @return void\n * @static\n */\n public static function reconnectIfMissingConnection()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->reconnectIfMissingConnection();\n }\n\n /**\n * Register a hook to be run just before a database transaction is started.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function beforeStartingTransaction($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->beforeStartingTransaction($callback);\n }\n\n /**\n * Register a hook to be run just before a database query is executed.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function beforeExecuting($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->beforeExecuting($callback);\n }\n\n /**\n * Register a database query listener with the connection.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function listen($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->listen($callback);\n }\n\n /**\n * Get a new raw query expression.\n *\n * @param mixed $value\n * @return \\Illuminate\\Contracts\\Database\\Query\\Expression\n * @static\n */\n public static function raw($value)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->raw($value);\n }\n\n /**\n * Escape a value for safe SQL embedding.\n *\n * @param string|float|int|bool|null $value\n * @param bool $binary\n * @return string\n * @static\n */\n public static function escape($value, $binary = false)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->escape($value, $binary);\n }\n\n /**\n * Determine if the database connection has modified any database records.\n *\n * @return bool\n * @static\n */\n public static function hasModifiedRecords()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->hasModifiedRecords();\n }\n\n /**\n * Indicate if any records have been modified.\n *\n * @param bool $value\n * @return void\n * @static\n */\n public static function recordsHaveBeenModified($value = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->recordsHaveBeenModified($value);\n }\n\n /**\n * Set the record modification state.\n *\n * @param bool $value\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setRecordModificationState($value)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setRecordModificationState($value);\n }\n\n /**\n * Reset the record modification state.\n *\n * @return void\n * @static\n */\n public static function forgetRecordModificationState()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->forgetRecordModificationState();\n }\n\n /**\n * Indicate that the connection should use the write PDO connection for reads.\n *\n * @param bool $value\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function useWriteConnectionWhenReading($value = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->useWriteConnectionWhenReading($value);\n }\n\n /**\n * Get the current PDO connection.\n *\n * @return \\PDO\n * @static\n */\n public static function getPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getPdo();\n }\n\n /**\n * Get the current PDO connection parameter without executing any reconnect logic.\n *\n * @return \\PDO|\\Closure|null\n * @static\n */\n public static function getRawPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawPdo();\n }\n\n /**\n * Get the current PDO connection used for reading.\n *\n * @return \\PDO\n * @static\n */\n public static function getReadPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getReadPdo();\n }\n\n /**\n * Get the current read PDO connection parameter without executing any reconnect logic.\n *\n * @return \\PDO|\\Closure|null\n * @static\n */\n public static function getRawReadPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawReadPdo();\n }\n\n /**\n * Set the PDO connection.\n *\n * @param \\PDO|\\Closure|null $pdo\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setPdo($pdo)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setPdo($pdo);\n }\n\n /**\n * Set the PDO connection used for reading.\n *\n * @param \\PDO|\\Closure|null $pdo\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setReadPdo($pdo)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setReadPdo($pdo);\n }\n\n /**\n * Get the database connection name.\n *\n * @return string|null\n * @static\n */\n public static function getName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getName();\n }\n\n /**\n * Get the database connection full name.\n *\n * @return string|null\n * @static\n */\n public static function getNameWithReadWriteType()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getNameWithReadWriteType();\n }\n\n /**\n * Get an option from the configuration options.\n *\n * @param string|null $option\n * @return mixed\n * @static\n */\n public static function getConfig($option = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getConfig($option);\n }\n\n /**\n * Get the PDO driver name.\n *\n * @return string\n * @static\n */\n public static function getDriverName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDriverName();\n }\n\n /**\n * Get the query grammar used by the connection.\n *\n * @return \\Illuminate\\Database\\Query\\Grammars\\Grammar\n * @static\n */\n public static function getQueryGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getQueryGrammar();\n }\n\n /**\n * Set the query grammar used by the connection.\n *\n * @param \\Illuminate\\Database\\Query\\Grammars\\Grammar $grammar\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setQueryGrammar($grammar)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setQueryGrammar($grammar);\n }\n\n /**\n * Get the schema grammar used by the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\Grammars\\Grammar\n * @static\n */\n public static function getSchemaGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaGrammar();\n }\n\n /**\n * Set the schema grammar used by the connection.\n *\n * @param \\Illuminate\\Database\\Schema\\Grammars\\Grammar $grammar\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setSchemaGrammar($grammar)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setSchemaGrammar($grammar);\n }\n\n /**\n * Get the query post processor used by the connection.\n *\n * @return \\Illuminate\\Database\\Query\\Processors\\Processor\n * @static\n */\n public static function getPostProcessor()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getPostProcessor();\n }\n\n /**\n * Set the query post processor used by the connection.\n *\n * @param \\Illuminate\\Database\\Query\\Processors\\Processor $processor\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setPostProcessor($processor)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setPostProcessor($processor);\n }\n\n /**\n * Get the event dispatcher used by the connection.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getEventDispatcher()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getEventDispatcher();\n }\n\n /**\n * Set the event dispatcher instance on the connection.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setEventDispatcher($events)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setEventDispatcher($events);\n }\n\n /**\n * Unset the event dispatcher for this connection.\n *\n * @return void\n * @static\n */\n public static function unsetEventDispatcher()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->unsetEventDispatcher();\n }\n\n /**\n * Set the transaction manager instance on the connection.\n *\n * @param \\Illuminate\\Database\\DatabaseTransactionsManager $manager\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setTransactionManager($manager)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setTransactionManager($manager);\n }\n\n /**\n * Unset the transaction manager for this connection.\n *\n * @return void\n * @static\n */\n public static function unsetTransactionManager()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->unsetTransactionManager();\n }\n\n /**\n * Determine if the connection is in a \"dry run\".\n *\n * @return bool\n * @static\n */\n public static function pretending()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->pretending();\n }\n\n /**\n * Get the connection query log.\n *\n * @return \\Illuminate\\Database\\array{query: string, bindings: array, time: float|null}[]\n * @static\n */\n public static function getQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getQueryLog();\n }\n\n /**\n * Get the connection query log with embedded bindings.\n *\n * @return array\n * @static\n */\n public static function getRawQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawQueryLog();\n }\n\n /**\n * Clear the query log.\n *\n * @return void\n * @static\n */\n public static function flushQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->flushQueryLog();\n }\n\n /**\n * Enable the query log on the connection.\n *\n * @return void\n * @static\n */\n public static function enableQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->enableQueryLog();\n }\n\n /**\n * Disable the query log on the connection.\n *\n * @return void\n * @static\n */\n public static function disableQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->disableQueryLog();\n }\n\n /**\n * Determine whether we're logging queries.\n *\n * @return bool\n * @static\n */\n public static function logging()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->logging();\n }\n\n /**\n * Get the name of the connected database.\n *\n * @return string\n * @static\n */\n public static function getDatabaseName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDatabaseName();\n }\n\n /**\n * Set the name of the connected database.\n *\n * @param string $database\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setDatabaseName($database)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setDatabaseName($database);\n }\n\n /**\n * Set the read / write type of the connection.\n *\n * @param string|null $readWriteType\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setReadWriteType($readWriteType)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setReadWriteType($readWriteType);\n }\n\n /**\n * Get the table prefix for the connection.\n *\n * @return string\n * @static\n */\n public static function getTablePrefix()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getTablePrefix();\n }\n\n /**\n * Set the table prefix in use by the connection.\n *\n * @param string $prefix\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setTablePrefix($prefix)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setTablePrefix($prefix);\n }\n\n /**\n * Execute the given callback without table prefix.\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutTablePrefix($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->withoutTablePrefix($callback);\n }\n\n /**\n * Register a connection resolver.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function resolverFor($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n \\Illuminate\\Database\\MariaDbConnection::resolverFor($driver, $callback);\n }\n\n /**\n * Get the connection resolver for the given driver.\n *\n * @param string $driver\n * @return \\Closure|null\n * @static\n */\n public static function getResolver($driver)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n return \\Illuminate\\Database\\MariaDbConnection::getResolver($driver);\n }\n\n /**\n * @template TReturn of mixed\n * \n * Execute a Closure within a transaction.\n * @param (\\Closure(static): TReturn) $callback\n * @param int $attempts\n * @return TReturn\n * @throws \\Throwable\n * @static\n */\n public static function transaction($callback, $attempts = 1)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->transaction($callback, $attempts);\n }\n\n /**\n * Start a new database transaction.\n *\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function beginTransaction()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->beginTransaction();\n }\n\n /**\n * Commit the active database transaction.\n *\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function commit()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->commit();\n }\n\n /**\n * Rollback the active database transaction.\n *\n * @param int|null $toLevel\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function rollBack($toLevel = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->rollBack($toLevel);\n }\n\n /**\n * Get the number of active transactions.\n *\n * @return int\n * @static\n */\n public static function transactionLevel()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->transactionLevel();\n }\n\n /**\n * Execute the callback after a transaction commits.\n *\n * @param callable $callback\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function afterCommit($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->afterCommit($callback);\n }\n\n /**\n * Execute the callback after a transaction rolls back.\n *\n * @param callable $callback\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function afterRollBack($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->afterRollBack($callback);\n }\n\n }\n /**\n * @see \\Illuminate\\Events\\Dispatcher\n * @see \\Illuminate\\Support\\Testing\\Fakes\\EventFake\n */\n class Event {\n /**\n * Register an event listener with the dispatcher.\n *\n * @param \\Illuminate\\Events\\Queued\\Closure|callable|array|class-string|string $events\n * @param \\Illuminate\\Events\\Queued\\Closure|callable|array|class-string|null $listener\n * @return void\n * @static\n */\n public static function listen($events, $listener = null)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->listen($events, $listener);\n }\n\n /**\n * Determine if a given event has listeners.\n *\n * @param string $eventName\n * @return bool\n * @static\n */\n public static function hasListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->hasListeners($eventName);\n }\n\n /**\n * Determine if the given event has any wildcard listeners.\n *\n * @param string $eventName\n * @return bool\n * @static\n */\n public static function hasWildcardListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->hasWildcardListeners($eventName);\n }\n\n /**\n * Register an event and payload to be fired later.\n *\n * @param string $event\n * @param object|array $payload\n * @return void\n * @static\n */\n public static function push($event, $payload = [])\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->push($event, $payload);\n }\n\n /**\n * Flush a set of pushed events.\n *\n * @param string $event\n * @return void\n * @static\n */\n public static function flush($event)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->flush($event);\n }\n\n /**\n * Register an event subscriber with the dispatcher.\n *\n * @param object|string $subscriber\n * @return void\n * @static\n */\n public static function subscribe($subscriber)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->subscribe($subscriber);\n }\n\n /**\n * Fire an event until the first non-null response is returned.\n *\n * @param string|object $event\n * @param mixed $payload\n * @return mixed\n * @static\n */\n public static function until($event, $payload = [])\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->until($event, $payload);\n }\n\n /**\n * Fire an event and call the listeners.\n *\n * @param string|object $event\n * @param mixed $payload\n * @param bool $halt\n * @return array|null\n * @static\n */\n public static function dispatch($event, $payload = [], $halt = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->dispatch($event, $payload, $halt);\n }\n\n /**\n * Get all of the listeners for a given event name.\n *\n * @param string $eventName\n * @return array\n * @static\n */\n public static function getListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->getListeners($eventName);\n }\n\n /**\n * Register an event listener with the dispatcher.\n *\n * @param \\Closure|string|array $listener\n * @param bool $wildcard\n * @return \\Closure\n * @static\n */\n public static function makeListener($listener, $wildcard = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->makeListener($listener, $wildcard);\n }\n\n /**\n * Create a class based listener using the IoC container.\n *\n * @param string $listener\n * @param bool $wildcard\n * @return \\Closure\n * @static\n */\n public static function createClassListener($listener, $wildcard = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->createClassListener($listener, $wildcard);\n }\n\n /**\n * Remove a set of listeners from the dispatcher.\n *\n * @param string $event\n * @return void\n * @static\n */\n public static function forget($event)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->forget($event);\n }\n\n /**\n * Forget all of the pushed listeners.\n *\n * @return void\n * @static\n */\n public static function forgetPushed()\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->forgetPushed();\n }\n\n /**\n * Set the queue resolver implementation.\n *\n * @param callable $resolver\n * @return \\Illuminate\\Events\\Dispatcher\n * @static\n */\n public static function setQueueResolver($resolver)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->setQueueResolver($resolver);\n }\n\n /**\n * Set the database transaction manager resolver implementation.\n *\n * @param callable $resolver\n * @return \\Illuminate\\Events\\Dispatcher\n * @static\n */\n public static function setTransactionManagerResolver($resolver)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->setTransactionManagerResolver($resolver);\n }\n\n /**\n * Execute the given callback while deferring events, then dispatch all deferred events.\n *\n * @param callable $callback\n * @param array|null $events\n * @return mixed\n * @static\n */\n public static function defer($callback, $events = null)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->defer($callback, $events);\n }\n\n /**\n * Gets the raw, unprepared listeners.\n *\n * @return array\n * @static\n */\n public static function getRawListeners()\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->getRawListeners();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Events\\Dispatcher::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Events\\Dispatcher::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Events\\Dispatcher::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Events\\Dispatcher::flushMacros();\n }\n\n /**\n * Specify the events that should be dispatched instead of faked.\n *\n * @param array|string $eventsToDispatch\n * @return \\Illuminate\\Support\\Testing\\Fakes\\EventFake\n * @static\n */\n public static function except($eventsToDispatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->except($eventsToDispatch);\n }\n\n /**\n * Assert if an event has a listener attached to it.\n *\n * @param string $expectedEvent\n * @param string|array $expectedListener\n * @return void\n * @static\n */\n public static function assertListening($expectedEvent, $expectedListener)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertListening($expectedEvent, $expectedListener);\n }\n\n /**\n * Assert if an event was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $event\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatched($event, $callback);\n }\n\n /**\n * Assert if an event was dispatched exactly once.\n *\n * @param string $event\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedOnce($event)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatchedOnce($event);\n }\n\n /**\n * Assert if an event was dispatched a number of times.\n *\n * @param string $event\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedTimes($event, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatchedTimes($event, $times);\n }\n\n /**\n * Determine if an event was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $event\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertNotDispatched($event, $callback);\n }\n\n /**\n * Assert that no events were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingDispatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertNothingDispatched();\n }\n\n /**\n * Get all of the events matching a truth-test callback.\n *\n * @param string $event\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->dispatched($event, $callback);\n }\n\n /**\n * Determine if the given event has been dispatched.\n *\n * @param string $event\n * @return bool\n * @static\n */\n public static function hasDispatched($event)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->hasDispatched($event);\n }\n\n /**\n * Get the events that have been dispatched.\n *\n * @return array\n * @static\n */\n public static function dispatchedEvents()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->dispatchedEvents();\n }\n\n }\n /**\n * @see \\Illuminate\\Filesystem\\Filesystem\n */\n class File {\n /**\n * Determine if a file or directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function exists($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->exists($path);\n }\n\n /**\n * Determine if a file or directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function missing($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->missing($path);\n }\n\n /**\n * Get the contents of a file.\n *\n * @param string $path\n * @param bool $lock\n * @return string\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function get($path, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->get($path, $lock);\n }\n\n /**\n * Get the contents of a file as decoded JSON.\n *\n * @param string $path\n * @param int $flags\n * @param bool $lock\n * @return array\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function json($path, $flags = 0, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->json($path, $flags, $lock);\n }\n\n /**\n * Get contents of a file with shared access.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function sharedGet($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->sharedGet($path);\n }\n\n /**\n * Get the returned value of a file.\n *\n * @param string $path\n * @param array $data\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function getRequire($path, $data = [])\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->getRequire($path, $data);\n }\n\n /**\n * Require the given file once.\n *\n * @param string $path\n * @param array $data\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function requireOnce($path, $data = [])\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->requireOnce($path, $data);\n }\n\n /**\n * Get the contents of a file one line at a time.\n *\n * @param string $path\n * @return \\Illuminate\\Support\\LazyCollection\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function lines($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->lines($path);\n }\n\n /**\n * Get the hash of the file at the given path.\n *\n * @param string $path\n * @param string $algorithm\n * @return string|false\n * @static\n */\n public static function hash($path, $algorithm = 'md5')\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->hash($path, $algorithm);\n }\n\n /**\n * Write the contents of a file.\n *\n * @param string $path\n * @param string $contents\n * @param bool $lock\n * @return int|bool\n * @static\n */\n public static function put($path, $contents, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->put($path, $contents, $lock);\n }\n\n /**\n * Write the contents of a file, replacing it atomically if it already exists.\n *\n * @param string $path\n * @param string $content\n * @param int|null $mode\n * @return void\n * @static\n */\n public static function replace($path, $content, $mode = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->replace($path, $content, $mode);\n }\n\n /**\n * Replace a given string within a given file.\n *\n * @param array|string $search\n * @param array|string $replace\n * @param string $path\n * @return void\n * @static\n */\n public static function replaceInFile($search, $replace, $path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->replaceInFile($search, $replace, $path);\n }\n\n /**\n * Prepend to a file.\n *\n * @param string $path\n * @param string $data\n * @return int\n * @static\n */\n public static function prepend($path, $data)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->prepend($path, $data);\n }\n\n /**\n * Append to a file.\n *\n * @param string $path\n * @param string $data\n * @param bool $lock\n * @return int\n * @static\n */\n public static function append($path, $data, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->append($path, $data, $lock);\n }\n\n /**\n * Get or set UNIX mode of a file or directory.\n *\n * @param string $path\n * @param int|null $mode\n * @return mixed\n * @static\n */\n public static function chmod($path, $mode = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->chmod($path, $mode);\n }\n\n /**\n * Delete the file at a given path.\n *\n * @param string|array $paths\n * @return bool\n * @static\n */\n public static function delete($paths)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->delete($paths);\n }\n\n /**\n * Move a file to a new location.\n *\n * @param string $path\n * @param string $target\n * @return bool\n * @static\n */\n public static function move($path, $target)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->move($path, $target);\n }\n\n /**\n * Copy a file to a new location.\n *\n * @param string $path\n * @param string $target\n * @return bool\n * @static\n */\n public static function copy($path, $target)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->copy($path, $target);\n }\n\n /**\n * Create a symlink to the target file or directory. On Windows, a hard link is created if the target is a file.\n *\n * @param string $target\n * @param string $link\n * @return bool|null\n * @static\n */\n public static function link($target, $link)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->link($target, $link);\n }\n\n /**\n * Create a relative symlink to the target file or directory.\n *\n * @param string $target\n * @param string $link\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function relativeLink($target, $link)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->relativeLink($target, $link);\n }\n\n /**\n * Extract the file name from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function name($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->name($path);\n }\n\n /**\n * Extract the trailing name component from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function basename($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->basename($path);\n }\n\n /**\n * Extract the parent directory from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function dirname($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->dirname($path);\n }\n\n /**\n * Extract the file extension from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function extension($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->extension($path);\n }\n\n /**\n * Guess the file extension from the mime-type of a given file.\n *\n * @param string $path\n * @return string|null\n * @throws \\RuntimeException\n * @static\n */\n public static function guessExtension($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->guessExtension($path);\n }\n\n /**\n * Get the file type of a given file.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function type($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->type($path);\n }\n\n /**\n * Get the mime-type of a given file.\n *\n * @param string $path\n * @return string|false\n * @static\n */\n public static function mimeType($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->mimeType($path);\n }\n\n /**\n * Get the file size of a given file.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function size($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->size($path);\n }\n\n /**\n * Get the file's last modification time.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function lastModified($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->lastModified($path);\n }\n\n /**\n * Determine if the given path is a directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function isDirectory($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isDirectory($directory);\n }\n\n /**\n * Determine if the given path is a directory that does not contain any other files or directories.\n *\n * @param string $directory\n * @param bool $ignoreDotFiles\n * @return bool\n * @static\n */\n public static function isEmptyDirectory($directory, $ignoreDotFiles = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isEmptyDirectory($directory, $ignoreDotFiles);\n }\n\n /**\n * Determine if the given path is readable.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isReadable($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isReadable($path);\n }\n\n /**\n * Determine if the given path is writable.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isWritable($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isWritable($path);\n }\n\n /**\n * Determine if two files are the same by comparing their hashes.\n *\n * @param string $firstFile\n * @param string $secondFile\n * @return bool\n * @static\n */\n public static function hasSameHash($firstFile, $secondFile)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->hasSameHash($firstFile, $secondFile);\n }\n\n /**\n * Determine if the given path is a file.\n *\n * @param string $file\n * @return bool\n * @static\n */\n public static function isFile($file)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isFile($file);\n }\n\n /**\n * Find path names matching a given pattern.\n *\n * @param string $pattern\n * @param int $flags\n * @return array\n * @static\n */\n public static function glob($pattern, $flags = 0)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->glob($pattern, $flags);\n }\n\n /**\n * Get an array of all files in a directory.\n *\n * @param string $directory\n * @param bool $hidden\n * @return \\Symfony\\Component\\Finder\\SplFileInfo[]\n * @static\n */\n public static function files($directory, $hidden = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->files($directory, $hidden);\n }\n\n /**\n * Get all of the files from the given directory (recursive).\n *\n * @param string $directory\n * @param bool $hidden\n * @return \\Symfony\\Component\\Finder\\SplFileInfo[]\n * @static\n */\n public static function allFiles($directory, $hidden = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->allFiles($directory, $hidden);\n }\n\n /**\n * Get all of the directories within a given directory.\n *\n * @param string $directory\n * @return array\n * @static\n */\n public static function directories($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->directories($directory);\n }\n\n /**\n * Ensure a directory exists.\n *\n * @param string $path\n * @param int $mode\n * @param bool $recursive\n * @return void\n * @static\n */\n public static function ensureDirectoryExists($path, $mode = 493, $recursive = true)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->ensureDirectoryExists($path, $mode, $recursive);\n }\n\n /**\n * Create a directory.\n *\n * @param string $path\n * @param int $mode\n * @param bool $recursive\n * @param bool $force\n * @return bool\n * @static\n */\n public static function makeDirectory($path, $mode = 493, $recursive = false, $force = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->makeDirectory($path, $mode, $recursive, $force);\n }\n\n /**\n * Move a directory.\n *\n * @param string $from\n * @param string $to\n * @param bool $overwrite\n * @return bool\n * @static\n */\n public static function moveDirectory($from, $to, $overwrite = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->moveDirectory($from, $to, $overwrite);\n }\n\n /**\n * Copy a directory from one location to another.\n *\n * @param string $directory\n * @param string $destination\n * @param int|null $options\n * @return bool\n * @static\n */\n public static function copyDirectory($directory, $destination, $options = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->copyDirectory($directory, $destination, $options);\n }\n\n /**\n * Recursively delete a directory.\n * \n * The directory itself may be optionally preserved.\n *\n * @param string $directory\n * @param bool $preserve\n * @return bool\n * @static\n */\n public static function deleteDirectory($directory, $preserve = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->deleteDirectory($directory, $preserve);\n }\n\n /**\n * Remove all of the directories within a given directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function deleteDirectories($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->deleteDirectories($directory);\n }\n\n /**\n * Empty the specified directory of all files and folders.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function cleanDirectory($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->cleanDirectory($directory);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Filesystem\\Filesystem::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Filesystem\\Filesystem::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Filesystem\\Filesystem::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Filesystem\\Filesystem::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Auth\\Access\\Gate\n */\n class Gate {\n /**\n * Determine if a given ability has been defined.\n *\n * @param string|array $ability\n * @return bool\n * @static\n */\n public static function has($ability)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->has($ability);\n }\n\n /**\n * Perform an on-demand authorization check. Throw an authorization exception if the condition or callback is false.\n *\n * @param \\Illuminate\\Auth\\Access\\Response|\\Closure|bool $condition\n * @param string|null $message\n * @param string|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function allowIf($condition, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->allowIf($condition, $message, $code);\n }\n\n /**\n * Perform an on-demand authorization check. Throw an authorization exception if the condition or callback is true.\n *\n * @param \\Illuminate\\Auth\\Access\\Response|\\Closure|bool $condition\n * @param string|null $message\n * @param string|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function denyIf($condition, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyIf($condition, $message, $code);\n }\n\n /**\n * Define a new ability.\n *\n * @param \\UnitEnum|string $ability\n * @param callable|array|string $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function define($ability, $callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->define($ability, $callback);\n }\n\n /**\n * Define abilities for a resource.\n *\n * @param string $name\n * @param string $class\n * @param array|null $abilities\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function resource($name, $class, $abilities = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->resource($name, $class, $abilities);\n }\n\n /**\n * Define a policy class for a given class type.\n *\n * @param string $class\n * @param string $policy\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function policy($class, $policy)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->policy($class, $policy);\n }\n\n /**\n * Register a callback to run before all Gate checks.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function before($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->before($callback);\n }\n\n /**\n * Register a callback to run after all Gate checks.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function after($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->after($callback);\n }\n\n /**\n * Determine if all of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $ability\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function allows($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->allows($ability, $arguments);\n }\n\n /**\n * Determine if any of the given abilities should be denied for the current user.\n *\n * @param iterable|\\UnitEnum|string $ability\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function denies($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denies($ability, $arguments);\n }\n\n /**\n * Determine if all of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function check($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->check($abilities, $arguments);\n }\n\n /**\n * Determine if any one of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function any($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->any($abilities, $arguments);\n }\n\n /**\n * Determine if all of the given abilities should be denied for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function none($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->none($abilities, $arguments);\n }\n\n /**\n * Determine if the given ability should be granted for the current user.\n *\n * @param \\UnitEnum|string $ability\n * @param mixed $arguments\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function authorize($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->authorize($ability, $arguments);\n }\n\n /**\n * Inspect the user for the given ability.\n *\n * @param \\UnitEnum|string $ability\n * @param mixed $arguments\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function inspect($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->inspect($ability, $arguments);\n }\n\n /**\n * Get the raw result from the authorization callback.\n *\n * @param string $ability\n * @param mixed $arguments\n * @return mixed\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function raw($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->raw($ability, $arguments);\n }\n\n /**\n * Get a policy instance for a given class.\n *\n * @param object|string $class\n * @return mixed\n * @static\n */\n public static function getPolicyFor($class)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->getPolicyFor($class);\n }\n\n /**\n * Specify a callback to be used to guess policy names.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function guessPolicyNamesUsing($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->guessPolicyNamesUsing($callback);\n }\n\n /**\n * Build a policy class instance of the given type.\n *\n * @param object|string $class\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function resolvePolicy($class)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->resolvePolicy($class);\n }\n\n /**\n * Get a gate instance for the given user.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable|mixed $user\n * @return static\n * @static\n */\n public static function forUser($user)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->forUser($user);\n }\n\n /**\n * Get all of the defined abilities.\n *\n * @return array\n * @static\n */\n public static function abilities()\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->abilities();\n }\n\n /**\n * Get all of the defined policies.\n *\n * @return array\n * @static\n */\n public static function policies()\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->policies();\n }\n\n /**\n * Set the default denial response for gates and policies.\n *\n * @param \\Illuminate\\Auth\\Access\\Response $response\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function defaultDenialResponse($response)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->defaultDenialResponse($response);\n }\n\n /**\n * Set the container instance used by the gate.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Deny with a HTTP status code.\n *\n * @param int $status\n * @param string|null $message\n * @param int|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function denyWithStatus($status, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyWithStatus($status, $message, $code);\n }\n\n /**\n * Deny with a 404 HTTP status code.\n *\n * @param string|null $message\n * @param int|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function denyAsNotFound($message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyAsNotFound($message, $code);\n }\n\n }\n /**\n * @see \\Illuminate\\Hashing\\HashManager\n * @see \\Illuminate\\Hashing\\AbstractHasher\n */\n class Hash {\n /**\n * Create an instance of the Bcrypt hash Driver.\n *\n * @return \\Illuminate\\Hashing\\BcryptHasher\n * @static\n */\n public static function createBcryptDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createBcryptDriver();\n }\n\n /**\n * Create an instance of the Argon2i hash Driver.\n *\n * @return \\Illuminate\\Hashing\\ArgonHasher\n * @static\n */\n public static function createArgonDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createArgonDriver();\n }\n\n /**\n * Create an instance of the Argon2id hash Driver.\n *\n * @return \\Illuminate\\Hashing\\Argon2IdHasher\n * @static\n */\n public static function createArgon2idDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createArgon2idDriver();\n }\n\n /**\n * Get information about the given hashed value.\n *\n * @param string $hashedValue\n * @return array\n * @static\n */\n public static function info($hashedValue)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->info($hashedValue);\n }\n\n /**\n * Hash the given value.\n *\n * @param string $value\n * @param array $options\n * @return string\n * @static\n */\n public static function make($value, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->make($value, $options);\n }\n\n /**\n * Check the given plain value against a hash.\n *\n * @param string $value\n * @param string $hashedValue\n * @param array $options\n * @return bool\n * @static\n */\n public static function check($value, $hashedValue, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->check($value, $hashedValue, $options);\n }\n\n /**\n * Check if the given hash has been hashed using the given options.\n *\n * @param string $hashedValue\n * @param array $options\n * @return bool\n * @static\n */\n public static function needsRehash($hashedValue, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->needsRehash($hashedValue, $options);\n }\n\n /**\n * Determine if a given string is already hashed.\n *\n * @param string $value\n * @return bool\n * @static\n */\n public static function isHashed($value)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->isHashed($value);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Verifies that the configuration is less than or equal to what is configured.\n *\n * @param array $value\n * @return bool\n * @internal\n * @static\n */\n public static function verifyConfiguration($value)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->verifyConfiguration($value);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->forgetDrivers();\n }\n\n }\n /**\n * @method static \\Illuminate\\Http\\Client\\PendingRequest baseUrl(string $url)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withBody(\\Psr\\Http\\Message\\StreamInterface|string $content, string $contentType = 'application/json')\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asJson()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asForm()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest attach(string|array $name, string|resource $contents = '', string|null $filename = null, array $headers = [])\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asMultipart()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest bodyFormat(string $format)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withQueryParameters(array $parameters)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest contentType(string $contentType)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest acceptJson()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest accept(string $contentType)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withHeaders(array $headers)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withHeader(string $name, mixed $value)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest replaceHeaders(array $headers)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withBasicAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withDigestAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withNtlmAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withToken(string $token, string $type = 'Bearer')\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withUserAgent(string|bool $userAgent)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withUrlParameters(array $parameters = [])\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withCookies(array $cookies, string $domain)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest maxRedirects(int $max)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withoutRedirecting()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withoutVerifying()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest sink(string|resource $to)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest timeout(int|float $seconds)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest connectTimeout(int|float $seconds)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest retry(array|int $times, \\Closure|int $sleepMilliseconds = 0, callable|null $when = null, bool $throw = true)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withOptions(array $options)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withRequestMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withResponseMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest beforeSending(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throw(callable|null $callback = null)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throwIf(callable|bool $condition)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throwUnless(callable|bool $condition)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dump()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dd()\n * @method static \\Illuminate\\Http\\Client\\Response get(string $url, array|string|null $query = null)\n * @method static \\Illuminate\\Http\\Client\\Response head(string $url, array|string|null $query = null)\n * @method static \\Illuminate\\Http\\Client\\Response post(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response patch(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response put(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response delete(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static array pool(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\Batch batch(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\Response send(string $method, string $url, array $options = [])\n * @method static \\GuzzleHttp\\Client buildClient()\n * @method static \\GuzzleHttp\\Client createClient(\\GuzzleHttp\\HandlerStack $handlerStack)\n * @method static \\GuzzleHttp\\HandlerStack buildHandlerStack()\n * @method static \\GuzzleHttp\\HandlerStack pushHandlers(\\GuzzleHttp\\HandlerStack $handlerStack)\n * @method static \\Closure buildBeforeSendingHandler()\n * @method static \\Closure buildRecorderHandler()\n * @method static \\Closure buildStubHandler()\n * @method static \\GuzzleHttp\\Psr7\\RequestInterface runBeforeSendingCallbacks(\\GuzzleHttp\\Psr7\\RequestInterface $request, array $options)\n * @method static array mergeOptions(array ...$options)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest stub(callable $callback)\n * @method static bool isAllowedRequestUrl(string $url)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest async(bool $async = true)\n * @method static \\GuzzleHttp\\Promise\\PromiseInterface|null getPromise()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest truncateExceptionsAt(int $length)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dontTruncateExceptions()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest setClient(\\GuzzleHttp\\Client $client)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest setHandler(callable $handler)\n * @method static array getOptions()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Http\\Client\\Factory\n */\n class Http {\n /**\n * Add middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalMiddleware($middleware);\n }\n\n /**\n * Add request middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalRequestMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalRequestMiddleware($middleware);\n }\n\n /**\n * Add response middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalResponseMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalResponseMiddleware($middleware);\n }\n\n /**\n * Set the options to apply to every request.\n *\n * @param \\Closure|array $options\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalOptions($options)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalOptions($options);\n }\n\n /**\n * Create a new response instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array $headers\n * @return \\GuzzleHttp\\Promise\\PromiseInterface\n * @static\n */\n public static function response($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::response($body, $status, $headers);\n }\n\n /**\n * Create a new PSR-7 response instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array<string, mixed> $headers\n * @return \\GuzzleHttp\\Psr7\\Response\n * @static\n */\n public static function psr7Response($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::psr7Response($body, $status, $headers);\n }\n\n /**\n * Create a new RequestException instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array<string, mixed> $headers\n * @return \\Illuminate\\Http\\Client\\RequestException\n * @static\n */\n public static function failedRequest($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::failedRequest($body, $status, $headers);\n }\n\n /**\n * Create a new connection exception for use during stubbing.\n *\n * @param string|null $message\n * @return \\Closure(\\Illuminate\\Http\\Client\\Request): \\GuzzleHttp\\Promise\\PromiseInterface\n * @static\n */\n public static function failedConnection($message = null)\n {\n return \\Illuminate\\Http\\Client\\Factory::failedConnection($message);\n }\n\n /**\n * Get an invokable object that returns a sequence of responses in order for use during stubbing.\n *\n * @param array $responses\n * @return \\Illuminate\\Http\\Client\\ResponseSequence\n * @static\n */\n public static function sequence($responses = [])\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->sequence($responses);\n }\n\n /**\n * Register a stub callable that will intercept requests and be able to return stub responses.\n *\n * @param callable|array<string, mixed>|null $callback\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function fake($callback = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->fake($callback);\n }\n\n /**\n * Register a response sequence for the given URL pattern.\n *\n * @param string $url\n * @return \\Illuminate\\Http\\Client\\ResponseSequence\n * @static\n */\n public static function fakeSequence($url = '*')\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->fakeSequence($url);\n }\n\n /**\n * Stub the given URL using the given callback.\n *\n * @param string $url\n * @param \\Illuminate\\Http\\Client\\Response|\\GuzzleHttp\\Promise\\PromiseInterface|callable|int|string|array|\\Illuminate\\Http\\Client\\ResponseSequence $callback\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function stubUrl($url, $callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->stubUrl($url, $callback);\n }\n\n /**\n * Indicate that an exception should be thrown if any request is not faked.\n *\n * @param bool $prevent\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function preventStrayRequests($prevent = true)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->preventStrayRequests($prevent);\n }\n\n /**\n * Determine if stray requests are being prevented.\n *\n * @return bool\n * @static\n */\n public static function preventingStrayRequests()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->preventingStrayRequests();\n }\n\n /**\n * Allow stray, unfaked requests entirely, or optionally allow only specific URLs.\n *\n * @param array<int, string>|null $only\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function allowStrayRequests($only = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->allowStrayRequests($only);\n }\n\n /**\n * Begin recording request / response pairs.\n *\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function record()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->record();\n }\n\n /**\n * Record a request response pair.\n *\n * @param \\Illuminate\\Http\\Client\\Request $request\n * @param \\Illuminate\\Http\\Client\\Response|null $response\n * @return void\n * @static\n */\n public static function recordRequestResponsePair($request, $response)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->recordRequestResponsePair($request, $response);\n }\n\n /**\n * Assert that a request / response pair was recorded matching a given truth test.\n *\n * @param callable|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool) $callback\n * @return void\n * @static\n */\n public static function assertSent($callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSent($callback);\n }\n\n /**\n * Assert that the given request was sent in the given order.\n *\n * @param list<string|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool)|callable> $callbacks\n * @return void\n * @static\n */\n public static function assertSentInOrder($callbacks)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSentInOrder($callbacks);\n }\n\n /**\n * Assert that a request / response pair was not recorded matching a given truth test.\n *\n * @param callable|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool) $callback\n * @return void\n * @static\n */\n public static function assertNotSent($callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertNotSent($callback);\n }\n\n /**\n * Assert that no request / response pair was recorded.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert how many requests have been recorded.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertSentCount($count)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSentCount($count);\n }\n\n /**\n * Assert that every created response sequence is empty.\n *\n * @return void\n * @static\n */\n public static function assertSequencesAreEmpty()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSequencesAreEmpty();\n }\n\n /**\n * Get a collection of the request / response pairs matching the given truth test.\n *\n * @param (\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool)|callable $callback\n * @return \\Illuminate\\Support\\Collection<int, array{0: \\Illuminate\\Http\\Client\\Request, 1: \\Illuminate\\Http\\Client\\Response|null}>\n * @static\n */\n public static function recorded($callback = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->recorded($callback);\n }\n\n /**\n * Create a new pending request instance for this factory.\n *\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function createPendingRequest()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->createPendingRequest();\n }\n\n /**\n * Get the current event dispatcher implementation.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher|null\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Get the array of global middleware.\n *\n * @return array\n * @static\n */\n public static function getGlobalMiddleware()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->getGlobalMiddleware();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Http\\Client\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Http\\Client\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Http\\Client\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Http\\Client\\Factory::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatApi();\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatAnalyticsApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatAnalyticsApi();\n }\n\n }\n /**\n * @see \\Illuminate\\Translation\\Translator\n */\n class Lang {\n /**\n * Determine if a translation exists for a given locale.\n *\n * @param string $key\n * @param string|null $locale\n * @return bool\n * @static\n */\n public static function hasForLocale($key, $locale = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->hasForLocale($key, $locale);\n }\n\n /**\n * Determine if a translation exists.\n *\n * @param string $key\n * @param string|null $locale\n * @param bool $fallback\n * @return bool\n * @static\n */\n public static function has($key, $locale = null, $fallback = true)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->has($key, $locale, $fallback);\n }\n\n /**\n * Get the translation for the given key.\n *\n * @param string $key\n * @param array $replace\n * @param string|null $locale\n * @param bool $fallback\n * @return string|array\n * @static\n */\n public static function get($key, $replace = [], $locale = null, $fallback = true)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->get($key, $replace, $locale, $fallback);\n }\n\n /**\n * Get a translation according to an integer value.\n *\n * @param string $key\n * @param \\Countable|int|float|array $number\n * @param array $replace\n * @param string|null $locale\n * @return string\n * @static\n */\n public static function choice($key, $number, $replace = [], $locale = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->choice($key, $number, $replace, $locale);\n }\n\n /**\n * Add translation lines to the given locale.\n *\n * @param array $lines\n * @param string $locale\n * @param string $namespace\n * @return void\n * @static\n */\n public static function addLines($lines, $locale, $namespace = '*')\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addLines($lines, $locale, $namespace);\n }\n\n /**\n * Load the specified language group.\n *\n * @param string $namespace\n * @param string $group\n * @param string $locale\n * @return void\n * @static\n */\n public static function load($namespace, $group, $locale)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->load($namespace, $group, $locale);\n }\n\n /**\n * Register a callback that is responsible for handling missing translation keys.\n *\n * @param callable|null $callback\n * @return static\n * @static\n */\n public static function handleMissingKeysUsing($callback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->handleMissingKeysUsing($callback);\n }\n\n /**\n * Add a new namespace to the loader.\n *\n * @param string $namespace\n * @param string $hint\n * @return void\n * @static\n */\n public static function addNamespace($namespace, $hint)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addNamespace($namespace, $hint);\n }\n\n /**\n * Add a new path to the loader.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function addPath($path)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addPath($path);\n }\n\n /**\n * Add a new JSON path to the loader.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function addJsonPath($path)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addJsonPath($path);\n }\n\n /**\n * Parse a key into namespace, group, and item.\n *\n * @param string $key\n * @return array\n * @static\n */\n public static function parseKey($key)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->parseKey($key);\n }\n\n /**\n * Specify a callback that should be invoked to determined the applicable locale array.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function determineLocalesUsing($callback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->determineLocalesUsing($callback);\n }\n\n /**\n * Get the message selector instance.\n *\n * @return \\Illuminate\\Translation\\MessageSelector\n * @static\n */\n public static function getSelector()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getSelector();\n }\n\n /**\n * Set the message selector instance.\n *\n * @param \\Illuminate\\Translation\\MessageSelector $selector\n * @return void\n * @static\n */\n public static function setSelector($selector)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setSelector($selector);\n }\n\n /**\n * Get the language line loader implementation.\n *\n * @return \\Illuminate\\Contracts\\Translation\\Loader\n * @static\n */\n public static function getLoader()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getLoader();\n }\n\n /**\n * Get the default locale being used.\n *\n * @return string\n * @static\n */\n public static function locale()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->locale();\n }\n\n /**\n * Get the default locale being used.\n *\n * @return string\n * @static\n */\n public static function getLocale()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getLocale();\n }\n\n /**\n * Set the default locale.\n *\n * @param string $locale\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function setLocale($locale)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setLocale($locale);\n }\n\n /**\n * Get the fallback locale being used.\n *\n * @return string\n * @static\n */\n public static function getFallback()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getFallback();\n }\n\n /**\n * Set the fallback locale being used.\n *\n * @param string $fallback\n * @return void\n * @static\n */\n public static function setFallback($fallback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setFallback($fallback);\n }\n\n /**\n * Set the loaded translation groups.\n *\n * @param array $loaded\n * @return void\n * @static\n */\n public static function setLoaded($loaded)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setLoaded($loaded);\n }\n\n /**\n * Add a handler to be executed in order to format a given class to a string during translation replacements.\n *\n * @param callable|string $class\n * @param callable|null $handler\n * @return void\n * @static\n */\n public static function stringable($class, $handler = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->stringable($class, $handler);\n }\n\n /**\n * Set the parsed value of a key.\n *\n * @param string $key\n * @param array $parsed\n * @return void\n * @static\n */\n public static function setParsedKey($key, $parsed)\n {\n //Method inherited from \\Illuminate\\Support\\NamespacedItemResolver \n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setParsedKey($key, $parsed);\n }\n\n /**\n * Flush the cache of parsed keys.\n *\n * @return void\n * @static\n */\n public static function flushParsedKeys()\n {\n //Method inherited from \\Illuminate\\Support\\NamespacedItemResolver \n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->flushParsedKeys();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Translation\\Translator::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Translation\\Translator::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Translation\\Translator::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Translation\\Translator::flushMacros();\n }\n\n }\n /**\n * @method static void write(string $level, \\Illuminate\\Contracts\\Support\\Arrayable|\\Illuminate\\Contracts\\Support\\Jsonable|\\Illuminate\\Support\\Stringable|array|string $message, array $context = [])\n * @method static \\Illuminate\\Log\\Logger withContext(array $context = [])\n * @method static void listen(\\Closure $callback)\n * @method static \\Psr\\Log\\LoggerInterface getLogger()\n * @method static \\Illuminate\\Contracts\\Events\\Dispatcher getEventDispatcher()\n * @method static void setEventDispatcher(\\Illuminate\\Contracts\\Events\\Dispatcher $dispatcher)\n * @method static \\Illuminate\\Log\\Logger|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Log\\Logger|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Log\\LogManager\n */\n class Log {\n /**\n * Build an on-demand log channel.\n *\n * @param array $config\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new, on-demand aggregate logger instance.\n *\n * @param array $channels\n * @param string|null $channel\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function stack($channels, $channel = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->stack($channels, $channel);\n }\n\n /**\n * Get a log channel instance.\n *\n * @param string|null $channel\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function channel($channel = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->channel($channel);\n }\n\n /**\n * Get a log driver instance.\n *\n * @param string|null $driver\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Share context across channels and stacks.\n *\n * @param array $context\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function shareContext($context)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->shareContext($context);\n }\n\n /**\n * The context shared across channels and stacks.\n *\n * @return array\n * @static\n */\n public static function sharedContext()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->sharedContext();\n }\n\n /**\n * Flush the log context on all currently resolved channels.\n *\n * @param string[]|null $keys\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function withoutContext($keys = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->withoutContext($keys);\n }\n\n /**\n * Flush the shared context.\n *\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function flushSharedContext()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->flushSharedContext();\n }\n\n /**\n * Get the default log driver name.\n *\n * @return string|null\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default log driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Unset the given channel instance.\n *\n * @param string|null $driver\n * @return void\n * @static\n */\n public static function forgetChannel($driver = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->forgetChannel($driver);\n }\n\n /**\n * Get all of the resolved log channels.\n *\n * @return array\n * @static\n */\n public static function getChannels()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->getChannels();\n }\n\n /**\n * System is unusable.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function emergency($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->emergency($message, $context);\n }\n\n /**\n * Action must be taken immediately.\n * \n * Example: Entire website down, database unavailable, etc. This should\n * trigger the SMS alerts and wake you up.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function alert($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->alert($message, $context);\n }\n\n /**\n * Critical conditions.\n * \n * Example: Application component unavailable, unexpected exception.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function critical($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->critical($message, $context);\n }\n\n /**\n * Runtime errors that do not require immediate action but should typically\n * be logged and monitored.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function error($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->error($message, $context);\n }\n\n /**\n * Exceptional occurrences that are not errors.\n * \n * Example: Use of deprecated APIs, poor use of an API, undesirable things\n * that are not necessarily wrong.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function warning($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->warning($message, $context);\n }\n\n /**\n * Normal but significant events.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function notice($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->notice($message, $context);\n }\n\n /**\n * Interesting events.\n * \n * Example: User logs in, SQL logs.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function info($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->info($message, $context);\n }\n\n /**\n * Detailed debug information.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function debug($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->debug($message, $context);\n }\n\n /**\n * Logs with an arbitrary level.\n *\n * @param mixed $level\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function log($level, $message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->log($level, $message, $context);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->setApplication($app);\n }\n\n }\n /**\n * @method static void alwaysFrom(string $address, string|null $name = null)\n * @method static void alwaysReplyTo(string $address, string|null $name = null)\n * @method static void alwaysReturnPath(string $address)\n * @method static void alwaysTo(string $address, string|null $name = null)\n * @method static \\Illuminate\\Mail\\SentMessage|null html(string $html, mixed $callback)\n * @method static \\Illuminate\\Mail\\SentMessage|null plain(string $view, array $data, mixed $callback)\n * @method static string render(string|array $view, array $data = [])\n * @method static mixed onQueue(\\BackedEnum|string|null $queue, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static mixed queueOn(string $queue, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static mixed laterOn(string $queue, \\DateTimeInterface|\\DateInterval|int $delay, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static \\Symfony\\Component\\Mailer\\Transport\\TransportInterface getSymfonyTransport()\n * @method static \\Illuminate\\Contracts\\View\\Factory getViewFactory()\n * @method static void setSymfonyTransport(\\Symfony\\Component\\Mailer\\Transport\\TransportInterface $transport)\n * @method static \\Illuminate\\Mail\\Mailer setQueue(\\Illuminate\\Contracts\\Queue\\Factory $queue)\n * @method static void macro(string $name, object|callable $macro)\n * @method static void mixin(object $mixin, bool $replace = true)\n * @method static bool hasMacro(string $name)\n * @method static void flushMacros()\n * @see \\Illuminate\\Mail\\MailManager\n * @see \\Illuminate\\Support\\Testing\\Fakes\\MailFake\n */\n class Mail {\n /**\n * Get a mailer instance by name.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Mail\\Mailer\n * @static\n */\n public static function mailer($name = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->mailer($name);\n }\n\n /**\n * Get a mailer driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Mail\\Mailer\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Build a new mailer instance.\n *\n * @param array $config\n * @return \\Illuminate\\Mail\\Mailer\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new transport instance.\n *\n * @param array $config\n * @return \\Symfony\\Component\\Mailer\\Transport\\TransportInterface\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function createSymfonyTransport($config)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->createSymfonyTransport($config);\n }\n\n /**\n * Get the default mail driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default mail driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Disconnect the given mailer and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom transport creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Forget all of the resolved mailer instances.\n *\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function forgetMailers()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->forgetMailers();\n }\n\n /**\n * Assert if a mailable was sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|int|null $callback\n * @return void\n * @static\n */\n public static function assertSent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertSent($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not sent or queued to be sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotOutgoing($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotOutgoing($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|null $callback\n * @return void\n * @static\n */\n public static function assertNotSent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotSent($mailable, $callback);\n }\n\n /**\n * Assert that no mailables were sent or queued to be sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingOutgoing()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingOutgoing();\n }\n\n /**\n * Assert that no mailables were sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert if a mailable was queued based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|int|null $callback\n * @return void\n * @static\n */\n public static function assertQueued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertQueued($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not queued based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|null $callback\n * @return void\n * @static\n */\n public static function assertNotQueued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotQueued($mailable, $callback);\n }\n\n /**\n * Assert that no mailables were queued.\n *\n * @return void\n * @static\n */\n public static function assertNothingQueued()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingQueued();\n }\n\n /**\n * Assert the total number of mailables that were sent.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertSentCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertSentCount($count);\n }\n\n /**\n * Assert the total number of mailables that were queued.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertQueuedCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertQueuedCount($count);\n }\n\n /**\n * Assert the total number of mailables that were sent or queued.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertOutgoingCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertOutgoingCount($count);\n }\n\n /**\n * Get all of the mailables matching a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function sent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->sent($mailable, $callback);\n }\n\n /**\n * Determine if the given mailable has been sent.\n *\n * @param string $mailable\n * @return bool\n * @static\n */\n public static function hasSent($mailable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->hasSent($mailable);\n }\n\n /**\n * Get all of the queued mailables matching a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function queued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->queued($mailable, $callback);\n }\n\n /**\n * Determine if the given mailable has been queued.\n *\n * @param string $mailable\n * @return bool\n * @static\n */\n public static function hasQueued($mailable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->hasQueued($mailable);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function to($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->to($users);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function cc($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->cc($users);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function bcc($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->bcc($users);\n }\n\n /**\n * Send a new message with only a raw text part.\n *\n * @param string $text\n * @param \\Closure|string $callback\n * @return void\n * @static\n */\n public static function raw($text, $callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->raw($text, $callback);\n }\n\n /**\n * Send a new message using a view.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param array $data\n * @param \\Closure|string|null $callback\n * @return mixed|void\n * @static\n */\n public static function send($view, $data = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->send($view, $data, $callback);\n }\n\n /**\n * Send a new message synchronously using a view.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $mailable\n * @param array $data\n * @param \\Closure|string|null $callback\n * @return void\n * @static\n */\n public static function sendNow($mailable, $data = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->sendNow($mailable, $data, $callback);\n }\n\n /**\n * Queue a new message for sending.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function queue($view, $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->queue($view, $queue);\n }\n\n /**\n * Queue a new e-mail message for sending after (n) seconds.\n *\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function later($delay, $view, $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->later($delay, $view, $queue);\n }\n\n }\n /**\n * @see \\Illuminate\\Notifications\\ChannelManager\n * @see \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake\n */\n class Notification {\n /**\n * Send the given notification to the given notifiable entities.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $notifiables\n * @param mixed $notification\n * @return void\n * @static\n */\n public static function send($notifiables, $notification)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->send($notifiables, $notification);\n }\n\n /**\n * Send the given notification immediately.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $notifiables\n * @param mixed $notification\n * @param array|null $channels\n * @return void\n * @static\n */\n public static function sendNow($notifiables, $notification, $channels = null)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->sendNow($notifiables, $notification, $channels);\n }\n\n /**\n * Get a channel instance.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function channel($name = null)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->channel($name);\n }\n\n /**\n * Get the default channel driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Get the default channel driver name.\n *\n * @return string\n * @static\n */\n public static function deliversVia()\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->deliversVia();\n }\n\n /**\n * Set the default channel driver name.\n *\n * @param string $channel\n * @return void\n * @static\n */\n public static function deliverVia($channel)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->deliverVia($channel);\n }\n\n /**\n * Set the locale of notifications.\n *\n * @param string $locale\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function locale($locale)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->locale($locale);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->forgetDrivers();\n }\n\n /**\n * Assert if a notification was sent on-demand based on a truth-test callback.\n *\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertSentOnDemand($notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentOnDemand($notification, $callback);\n }\n\n /**\n * Assert if a notification was sent based on a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertSentTo($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentTo($notifiable, $notification, $callback);\n }\n\n /**\n * Assert if a notification was sent on-demand a number of times.\n *\n * @param string $notification\n * @param int $times\n * @return void\n * @static\n */\n public static function assertSentOnDemandTimes($notification, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentOnDemandTimes($notification, $times);\n }\n\n /**\n * Assert if a notification was sent a number of times.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @param int $times\n * @return void\n * @static\n */\n public static function assertSentToTimes($notifiable, $notification, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentToTimes($notifiable, $notification, $times);\n }\n\n /**\n * Determine if a notification was sent based on a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertNotSentTo($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNotSentTo($notifiable, $notification, $callback);\n }\n\n /**\n * Assert that no notifications were sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert that no notifications were sent to the given notifiable.\n *\n * @param mixed $notifiable\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertNothingSentTo($notifiable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNothingSentTo($notifiable);\n }\n\n /**\n * Assert the total amount of times a notification was sent.\n *\n * @param string $notification\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertSentTimes($notification, $expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentTimes($notification, $expectedCount);\n }\n\n /**\n * Assert the total count of notification that were sent.\n *\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertCount($expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertCount($expectedCount);\n }\n\n /**\n * Get all of the notifications matching a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function sent($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->sent($notifiable, $notification, $callback);\n }\n\n /**\n * Determine if there are more notifications left to inspect.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @return bool\n * @static\n */\n public static function hasSent($notifiable, $notification)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->hasSent($notifiable, $notification);\n }\n\n /**\n * Specify if notification should be serialized and restored when being \"pushed\" to the queue.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the notifications that have been sent.\n *\n * @return array\n * @static\n */\n public static function sentNotifications()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->sentNotifications();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::flushMacros();\n }\n\n }\n /**\n * @method static string sendResetLink(array $credentials, \\Closure|null $callback = null)\n * @method static mixed reset(array $credentials, \\Closure $callback)\n * @method static \\Illuminate\\Contracts\\Auth\\CanResetPassword|null getUser(array $credentials)\n * @method static string createToken(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user)\n * @method static void deleteToken(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user)\n * @method static bool tokenExists(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user, string $token)\n * @method static \\Illuminate\\Auth\\Passwords\\TokenRepositoryInterface getRepository()\n * @method static \\Illuminate\\Support\\Timebox getTimebox()\n * @see \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager\n * @see \\Illuminate\\Auth\\Passwords\\PasswordBroker\n */\n class Password {\n /**\n * Attempt to get the broker from the local cache.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Auth\\PasswordBroker\n * @static\n */\n public static function broker($name = null)\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n return $instance->broker($name);\n }\n\n /**\n * Get the default password broker name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default password broker name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n }\n /**\n * @method static \\Illuminate\\Process\\PendingProcess command(array|string $command)\n * @method static \\Illuminate\\Process\\PendingProcess path(string $path)\n * @method static \\Illuminate\\Process\\PendingProcess timeout(int $timeout)\n * @method static \\Illuminate\\Process\\PendingProcess idleTimeout(int $timeout)\n * @method static \\Illuminate\\Process\\PendingProcess forever()\n * @method static \\Illuminate\\Process\\PendingProcess env(array $environment)\n * @method static \\Illuminate\\Process\\PendingProcess input(\\Traversable|resource|string|int|float|bool|null $input)\n * @method static \\Illuminate\\Process\\PendingProcess quietly()\n * @method static \\Illuminate\\Process\\PendingProcess tty(bool $tty = true)\n * @method static \\Illuminate\\Process\\PendingProcess options(array $options)\n * @method static \\Illuminate\\Contracts\\Process\\ProcessResult run(array|string|null $command = null, callable|null $output = null)\n * @method static \\Illuminate\\Process\\InvokedProcess start(array|string|null $command = null, callable|null $output = null)\n * @method static bool supportsTty()\n * @method static \\Illuminate\\Process\\PendingProcess withFakeHandlers(array $fakeHandlers)\n * @method static \\Illuminate\\Process\\PendingProcess|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Process\\PendingProcess|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Process\\PendingProcess\n * @see \\Illuminate\\Process\\Factory\n */\n class Process {\n /**\n * Create a new fake process response for testing purposes.\n *\n * @param array|string $output\n * @param array|string $errorOutput\n * @param int $exitCode\n * @return \\Illuminate\\Process\\FakeProcessResult\n * @static\n */\n public static function result($output = '', $errorOutput = '', $exitCode = 0)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->result($output, $errorOutput, $exitCode);\n }\n\n /**\n * Begin describing a fake process lifecycle.\n *\n * @return \\Illuminate\\Process\\FakeProcessDescription\n * @static\n */\n public static function describe()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->describe();\n }\n\n /**\n * Begin describing a fake process sequence.\n *\n * @param array $processes\n * @return \\Illuminate\\Process\\FakeProcessSequence\n * @static\n */\n public static function sequence($processes = [])\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->sequence($processes);\n }\n\n /**\n * Indicate that the process factory should fake processes.\n *\n * @param \\Closure|array|null $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function fake($callback = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->fake($callback);\n }\n\n /**\n * Determine if the process factory has fake process handlers and is recording processes.\n *\n * @return bool\n * @static\n */\n public static function isRecording()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->isRecording();\n }\n\n /**\n * Record the given process if processes should be recorded.\n *\n * @param \\Illuminate\\Process\\PendingProcess $process\n * @param \\Illuminate\\Contracts\\Process\\ProcessResult $result\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function recordIfRecording($process, $result)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->recordIfRecording($process, $result);\n }\n\n /**\n * Record the given process.\n *\n * @param \\Illuminate\\Process\\PendingProcess $process\n * @param \\Illuminate\\Contracts\\Process\\ProcessResult $result\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function record($process, $result)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->record($process, $result);\n }\n\n /**\n * Indicate that an exception should be thrown if any process is not faked.\n *\n * @param bool $prevent\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function preventStrayProcesses($prevent = true)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->preventStrayProcesses($prevent);\n }\n\n /**\n * Determine if stray processes are being prevented.\n *\n * @return bool\n * @static\n */\n public static function preventingStrayProcesses()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->preventingStrayProcesses();\n }\n\n /**\n * Assert that a process was recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertRan($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertRan($callback);\n }\n\n /**\n * Assert that a process was recorded a given number of times matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @param int $times\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertRanTimes($callback, $times = 1)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertRanTimes($callback, $times);\n }\n\n /**\n * Assert that a process was not recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertNotRan($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertNotRan($callback);\n }\n\n /**\n * Assert that a process was not recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertDidntRun($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertDidntRun($callback);\n }\n\n /**\n * Assert that no processes were recorded.\n *\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertNothingRan()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertNothingRan();\n }\n\n /**\n * Start defining a pool of processes.\n *\n * @param callable $callback\n * @return \\Illuminate\\Process\\Pool\n * @static\n */\n public static function pool($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->pool($callback);\n }\n\n /**\n * Start defining a series of piped processes.\n *\n * @param callable|array $callback\n * @return \\Illuminate\\Contracts\\Process\\ProcessResult\n * @static\n */\n public static function pipe($callback, $output = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->pipe($callback, $output);\n }\n\n /**\n * Run a pool of processes and wait for them to finish executing.\n *\n * @param callable $callback\n * @param callable|null $output\n * @return \\Illuminate\\Process\\ProcessPoolResults\n * @static\n */\n public static function concurrently($callback, $output = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->concurrently($callback, $output);\n }\n\n /**\n * Create a new pending process associated with this factory.\n *\n * @return \\Illuminate\\Process\\PendingProcess\n * @static\n */\n public static function newPendingProcess()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->newPendingProcess();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Process\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Process\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Process\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Process\\Factory::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Queue\\QueueManager\n * @see \\Illuminate\\Queue\\Queue\n * @see \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n */\n class Queue {\n /**\n * Register an event listener for the before job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function before($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->before($callback);\n }\n\n /**\n * Register an event listener for the after job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function after($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->after($callback);\n }\n\n /**\n * Register an event listener for the exception occurred job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function exceptionOccurred($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->exceptionOccurred($callback);\n }\n\n /**\n * Register an event listener for the daemon queue loop.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function looping($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->looping($callback);\n }\n\n /**\n * Register an event listener for the failed job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function failing($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->failing($callback);\n }\n\n /**\n * Register an event listener for the daemon queue starting.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function starting($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->starting($callback);\n }\n\n /**\n * Register an event listener for the daemon queue stopping.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function stopping($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->stopping($callback);\n }\n\n /**\n * Determine if the driver is connected.\n *\n * @param string|null $name\n * @return bool\n * @static\n */\n public static function connected($name = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->connected($name);\n }\n\n /**\n * Resolve a queue connection instance.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Queue\\Queue\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Add a queue connection resolver.\n *\n * @param string $driver\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function extend($driver, $resolver)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->extend($driver, $resolver);\n }\n\n /**\n * Add a queue connection resolver.\n *\n * @param string $driver\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function addConnector($driver, $resolver)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->addConnector($driver, $resolver);\n }\n\n /**\n * Get the name of the default queue connection.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the name of the default queue connection.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Get the full name for the given connection.\n *\n * @param string|null $connection\n * @return string\n * @static\n */\n public static function getName($connection = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getName($connection);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Queue\\QueueManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Specify the jobs that should be queued instead of faked.\n *\n * @param array|string $jobsToBeQueued\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function except($jobsToBeQueued)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->except($jobsToBeQueued);\n }\n\n /**\n * Assert if a job was pushed based on a truth-test callback.\n *\n * @param string|\\Closure $job\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertPushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushed($job, $callback);\n }\n\n /**\n * Assert if a job was pushed based on a truth-test callback.\n *\n * @param string $queue\n * @param string|\\Closure $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedOn($queue, $job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedOn($queue, $job, $callback);\n }\n\n /**\n * Assert if a job was pushed with chained jobs based on a truth-test callback.\n *\n * @param string $job\n * @param array $expectedChain\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedWithChain($job, $expectedChain = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedWithChain($job, $expectedChain, $callback);\n }\n\n /**\n * Assert if a job was pushed with an empty chain based on a truth-test callback.\n *\n * @param string $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedWithoutChain($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedWithoutChain($job, $callback);\n }\n\n /**\n * Assert if a closure was pushed based on a truth-test callback.\n *\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertClosurePushed($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertClosurePushed($callback);\n }\n\n /**\n * Assert that a closure was not pushed based on a truth-test callback.\n *\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertClosureNotPushed($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertClosureNotPushed($callback);\n }\n\n /**\n * Determine if a job was pushed based on a truth-test callback.\n *\n * @param string|\\Closure $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotPushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertNotPushed($job, $callback);\n }\n\n /**\n * Assert the total count of jobs that were pushed.\n *\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertCount($expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertCount($expectedCount);\n }\n\n /**\n * Assert that no jobs were pushed.\n *\n * @return void\n * @static\n */\n public static function assertNothingPushed()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertNothingPushed();\n }\n\n /**\n * Get all of the jobs matching a truth-test callback.\n *\n * @param string $job\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function pushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushed($job, $callback);\n }\n\n /**\n * Get all of the raw pushes matching a truth-test callback.\n *\n * @param null|\\Closure(string, ?string, array): bool $callback\n * @return \\Illuminate\\Support\\Collection<int, RawPushType>\n * @static\n */\n public static function pushedRaw($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushedRaw($callback);\n }\n\n /**\n * Get all of the jobs by listener class, passing an optional truth-test callback.\n *\n * @param class-string $listenerClass\n * @param (\\Closure(mixed, \\Illuminate\\Events\\CallQueuedListener, string|null, mixed): bool)|null $callback\n * @return \\Illuminate\\Support\\Collection<int, \\Illuminate\\Events\\CallQueuedListener>\n * @static\n */\n public static function listenersPushed($listenerClass, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->listenersPushed($listenerClass, $callback);\n }\n\n /**\n * Determine if there are any stored jobs for a given class.\n *\n * @param string $job\n * @return bool\n * @static\n */\n public static function hasPushed($job)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->hasPushed($job);\n }\n\n /**\n * Get the size of the queue.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function size($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->size($queue);\n }\n\n /**\n * Get the number of pending jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function pendingSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pendingSize($queue);\n }\n\n /**\n * Get the number of delayed jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function delayedSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->delayedSize($queue);\n }\n\n /**\n * Get the number of reserved jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function reservedSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->reservedSize($queue);\n }\n\n /**\n * Get the creation timestamp of the oldest pending job, excluding delayed jobs.\n *\n * @param string|null $queue\n * @return int|null\n * @static\n */\n public static function creationTimeOfOldestPendingJob($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->creationTimeOfOldestPendingJob($queue);\n }\n\n /**\n * Push a new job onto the queue.\n *\n * @param string|object $job\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function push($job, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->push($job, $data, $queue);\n }\n\n /**\n * Determine if a job should be faked or actually dispatched.\n *\n * @param object $job\n * @return bool\n * @static\n */\n public static function shouldFakeJob($job)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->shouldFakeJob($job);\n }\n\n /**\n * Push a raw payload onto the queue.\n *\n * @param string $payload\n * @param string|null $queue\n * @param array $options\n * @return mixed\n * @static\n */\n public static function pushRaw($payload, $queue = null, $options = [])\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushRaw($payload, $queue, $options);\n }\n\n /**\n * Push a new job onto the queue after (n) seconds.\n *\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param string|object $job\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function later($delay, $job, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->later($delay, $job, $data, $queue);\n }\n\n /**\n * Push a new job onto the queue.\n *\n * @param string $queue\n * @param string|object $job\n * @param mixed $data\n * @return mixed\n * @static\n */\n public static function pushOn($queue, $job, $data = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushOn($queue, $job, $data);\n }\n\n /**\n * Push a new job onto a specific queue after (n) seconds.\n *\n * @param string $queue\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param string|object $job\n * @param mixed $data\n * @return mixed\n * @static\n */\n public static function laterOn($queue, $delay, $job, $data = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->laterOn($queue, $delay, $job, $data);\n }\n\n /**\n * Pop the next job off of the queue.\n *\n * @param string|null $queue\n * @return \\Illuminate\\Contracts\\Queue\\Job|null\n * @static\n */\n public static function pop($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pop($queue);\n }\n\n /**\n * Push an array of jobs onto the queue.\n *\n * @param array $jobs\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function bulk($jobs, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->bulk($jobs, $data, $queue);\n }\n\n /**\n * Get the jobs that have been pushed.\n *\n * @return array\n * @static\n */\n public static function pushedJobs()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushedJobs();\n }\n\n /**\n * Get the payloads that were pushed raw.\n *\n * @return list<RawPushType>\n * @static\n */\n public static function rawPushes()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->rawPushes();\n }\n\n /**\n * Specify if jobs should be serialized and restored when being \"pushed\" to the queue.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the connection name for the queue.\n *\n * @return string\n * @static\n */\n public static function getConnectionName()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->getConnectionName();\n }\n\n /**\n * Set the connection name for the queue.\n *\n * @param string $name\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function setConnectionName($name)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->setConnectionName($name);\n }\n\n /**\n * Migrate the delayed jobs that are ready to the regular queue.\n *\n * @param string $from\n * @param string $to\n * @return array\n * @static\n */\n public static function migrateExpiredJobs($from, $to)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->migrateExpiredJobs($from, $to);\n }\n\n /**\n * Delete a reserved job from the queue.\n *\n * @param string $queue\n * @param \\Illuminate\\Queue\\Jobs\\RedisJob $job\n * @return void\n * @static\n */\n public static function deleteReserved($queue, $job)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->deleteReserved($queue, $job);\n }\n\n /**\n * Delete a reserved job from the reserved queue and release it.\n *\n * @param string $queue\n * @param \\Illuminate\\Queue\\Jobs\\RedisJob $job\n * @param int $delay\n * @return void\n * @static\n */\n public static function deleteAndRelease($queue, $job, $delay)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->deleteAndRelease($queue, $job, $delay);\n }\n\n /**\n * Delete all of the jobs from the queue.\n *\n * @param string $queue\n * @return int\n * @static\n */\n public static function clear($queue)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->clear($queue);\n }\n\n /**\n * Get the queue or return the default.\n *\n * @param string|null $queue\n * @return string\n * @static\n */\n public static function getQueue($queue)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getQueue($queue);\n }\n\n /**\n * Get the connection for the queue.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function getConnection()\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getConnection();\n }\n\n /**\n * Get the underlying Redis instance.\n *\n * @return \\Illuminate\\Contracts\\Redis\\Factory\n * @static\n */\n public static function getRedis()\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getRedis();\n }\n\n /**\n * Get the maximum number of attempts for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobTries($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobTries($job);\n }\n\n /**\n * Get the backoff for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobBackoff($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobBackoff($job);\n }\n\n /**\n * Get the expiration timestamp for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobExpiration($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobExpiration($job);\n }\n\n /**\n * Register a callback to be executed when creating job payloads.\n *\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function createPayloadUsing($callback)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n \\Illuminate\\Queue\\RedisQueue::createPayloadUsing($callback);\n }\n\n /**\n * Get the container instance being used by the connection.\n *\n * @return \\Illuminate\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the IoC container instance.\n *\n * @param \\Illuminate\\Container\\Container $container\n * @return void\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->setContainer($container);\n }\n\n }\n /**\n * @see \\Illuminate\\Cache\\RateLimiter\n */\n class RateLimiter {\n /**\n * Register a named limiter configuration.\n *\n * @param \\BackedEnum|\\UnitEnum|string $name\n * @param \\Closure $callback\n * @return \\Illuminate\\Cache\\RateLimiter\n * @static\n */\n public static function for($name, $callback)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->for($name, $callback);\n }\n\n /**\n * Get the given named rate limiter.\n *\n * @param \\BackedEnum|\\UnitEnum|string $name\n * @return \\Closure|null\n * @static\n */\n public static function limiter($name)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->limiter($name);\n }\n\n /**\n * Attempts to execute a callback if it's not limited.\n *\n * @param string $key\n * @param int $maxAttempts\n * @param \\Closure $callback\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @return mixed\n * @static\n */\n public static function attempt($key, $maxAttempts, $callback, $decaySeconds = 60)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->attempt($key, $maxAttempts, $callback, $decaySeconds);\n }\n\n /**\n * Determine if the given key has been \"accessed\" too many times.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return bool\n * @static\n */\n public static function tooManyAttempts($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->tooManyAttempts($key, $maxAttempts);\n }\n\n /**\n * Increment (by 1) the counter for a given key for a given decay time.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @return int\n * @static\n */\n public static function hit($key, $decaySeconds = 60)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->hit($key, $decaySeconds);\n }\n\n /**\n * Increment the counter for a given key for a given decay time by a given amount.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @param int $amount\n * @return int\n * @static\n */\n public static function increment($key, $decaySeconds = 60, $amount = 1)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->increment($key, $decaySeconds, $amount);\n }\n\n /**\n * Decrement the counter for a given key for a given decay time by a given amount.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @param int $amount\n * @return int\n * @static\n */\n public static function decrement($key, $decaySeconds = 60, $amount = 1)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->decrement($key, $decaySeconds, $amount);\n }\n\n /**\n * Get the number of attempts for the given key.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function attempts($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->attempts($key);\n }\n\n /**\n * Reset the number of attempts for the given key.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function resetAttempts($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->resetAttempts($key);\n }\n\n /**\n * Get the number of retries left for the given key.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return int\n * @static\n */\n public static function remaining($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->remaining($key, $maxAttempts);\n }\n\n /**\n * Get the number of retries left for the given key.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return int\n * @static\n */\n public static function retriesLeft($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->retriesLeft($key, $maxAttempts);\n }\n\n /**\n * Clear the hits and lockout timer for the given key.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function clear($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n $instance->clear($key);\n }\n\n /**\n * Get the number of seconds until the \"key\" is accessible again.\n *\n * @param string $key\n * @return int\n * @static\n */\n public static function availableIn($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->availableIn($key);\n }\n\n /**\n * Clean the rate limiter key from unicode characters.\n *\n * @param string $key\n * @return string\n * @static\n */\n public static function cleanRateLimiterKey($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->cleanRateLimiterKey($key);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\Redirector\n */\n class Redirect {\n /**\n * Create a new redirect response to the previous location.\n *\n * @param int $status\n * @param array $headers\n * @param mixed $fallback\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function back($status = 302, $headers = [], $fallback = false)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->back($status, $headers, $fallback);\n }\n\n /**\n * Create a new redirect response to the current URI.\n *\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function refresh($status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->refresh($status, $headers);\n }\n\n /**\n * Create a new redirect response, while putting the current URL in the session.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function guest($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->guest($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the previously intended location.\n *\n * @param mixed $default\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function intended($default = '/', $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->intended($default, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the given path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function to($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->to($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to an external URL (no validation).\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function away($path, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->away($path, $status, $headers);\n }\n\n /**\n * Create a new redirect response to the given HTTPS path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function secure($path, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->secure($path, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function route($route, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->route($route, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a signed named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function signedRoute($route, $parameters = [], $expiration = null, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->signedRoute($route, $parameters, $expiration, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a signed named route.\n *\n * @param \\BackedEnum|string $route\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function temporarySignedRoute($route, $expiration, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->temporarySignedRoute($route, $expiration, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a controller action.\n *\n * @param string|array $action\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function action($action, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->action($action, $parameters, $status, $headers);\n }\n\n /**\n * Get the URL generator instance.\n *\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function getUrlGenerator()\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->getUrlGenerator();\n }\n\n /**\n * Set the active session store.\n *\n * @param \\Illuminate\\Session\\Store $session\n * @return void\n * @static\n */\n public static function setSession($session)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n $instance->setSession($session);\n }\n\n /**\n * Get the \"intended\" URL from the session.\n *\n * @return string|null\n * @static\n */\n public static function getIntendedUrl()\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->getIntendedUrl();\n }\n\n /**\n * Set the \"intended\" URL in the session.\n *\n * @param string $url\n * @return \\Illuminate\\Routing\\Redirector\n * @static\n */\n public static function setIntendedUrl($url)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->setIntendedUrl($url);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\Redirector::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\Redirector::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\Redirector::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\Redirector::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Http\\Request\n */\n class Request {\n /**\n * Create a new Illuminate HTTP request from server variables.\n *\n * @return static\n * @static\n */\n public static function capture()\n {\n return \\Illuminate\\Http\\Request::capture();\n }\n\n /**\n * Return the Request instance.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function instance()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->instance();\n }\n\n /**\n * Get the request method.\n *\n * @return string\n * @static\n */\n public static function method()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->method();\n }\n\n /**\n * Get a URI instance for the request.\n *\n * @return \\Illuminate\\Support\\Uri\n * @static\n */\n public static function uri()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->uri();\n }\n\n /**\n * Get the root URL for the application.\n *\n * @return string\n * @static\n */\n public static function root()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->root();\n }\n\n /**\n * Get the URL (no query string) for the request.\n *\n * @return string\n * @static\n */\n public static function url()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->url();\n }\n\n /**\n * Get the full URL for the request.\n *\n * @return string\n * @static\n */\n public static function fullUrl()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrl();\n }\n\n /**\n * Get the full URL for the request with the added query string parameters.\n *\n * @param array $query\n * @return string\n * @static\n */\n public static function fullUrlWithQuery($query)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlWithQuery($query);\n }\n\n /**\n * Get the full URL for the request without the given query string parameters.\n *\n * @param array|string $keys\n * @return string\n * @static\n */\n public static function fullUrlWithoutQuery($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlWithoutQuery($keys);\n }\n\n /**\n * Get the current path info for the request.\n *\n * @return string\n * @static\n */\n public static function path()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->path();\n }\n\n /**\n * Get the current decoded path info for the request.\n *\n * @return string\n * @static\n */\n public static function decodedPath()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->decodedPath();\n }\n\n /**\n * Get a segment from the URI (1 based index).\n *\n * @param int $index\n * @param string|null $default\n * @return string|null\n * @static\n */\n public static function segment($index, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->segment($index, $default);\n }\n\n /**\n * Get all of the segments for the request path.\n *\n * @return array\n * @static\n */\n public static function segments()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->segments();\n }\n\n /**\n * Determine if the current request URI matches a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function is(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->is(...$patterns);\n }\n\n /**\n * Determine if the route name matches a given pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function routeIs(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->routeIs(...$patterns);\n }\n\n /**\n * Determine if the current request URL and query string match a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function fullUrlIs(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlIs(...$patterns);\n }\n\n /**\n * Get the host name.\n *\n * @return string\n * @static\n */\n public static function host()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->host();\n }\n\n /**\n * Get the HTTP host being requested.\n *\n * @return string\n * @static\n */\n public static function httpHost()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->httpHost();\n }\n\n /**\n * Get the scheme and HTTP host.\n *\n * @return string\n * @static\n */\n public static function schemeAndHttpHost()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->schemeAndHttpHost();\n }\n\n /**\n * Determine if the request is the result of an AJAX call.\n *\n * @return bool\n * @static\n */\n public static function ajax()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ajax();\n }\n\n /**\n * Determine if the request is the result of a PJAX call.\n *\n * @return bool\n * @static\n */\n public static function pjax()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->pjax();\n }\n\n /**\n * Determine if the request is the result of a prefetch call.\n *\n * @return bool\n * @static\n */\n public static function prefetch()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->prefetch();\n }\n\n /**\n * Determine if the request is over HTTPS.\n *\n * @return bool\n * @static\n */\n public static function secure()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->secure();\n }\n\n /**\n * Get the client IP address.\n *\n * @return string|null\n * @static\n */\n public static function ip()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ip();\n }\n\n /**\n * Get the client IP addresses.\n *\n * @return array\n * @static\n */\n public static function ips()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ips();\n }\n\n /**\n * Get the client user agent.\n *\n * @return string|null\n * @static\n */\n public static function userAgent()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->userAgent();\n }\n\n /**\n * Merge new input into the current request's input array.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function merge($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->merge($input);\n }\n\n /**\n * Merge new input into the request's input, but only when that key is missing from the request.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function mergeIfMissing($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->mergeIfMissing($input);\n }\n\n /**\n * Replace the input values for the current request.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function replace($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->replace($input);\n }\n\n /**\n * This method belongs to Symfony HttpFoundation and is not usually needed when using Laravel.\n * \n * Instead, you may use the \"input\" method.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get the JSON payload for the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return ($key is null ? \\Symfony\\Component\\HttpFoundation\\InputBag : mixed)\n * @static\n */\n public static function json($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->json($key, $default);\n }\n\n /**\n * Create a new request instance from the given Laravel request.\n *\n * @param \\Illuminate\\Http\\Request $from\n * @param \\Illuminate\\Http\\Request|null $to\n * @return static\n * @static\n */\n public static function createFrom($from, $to = null)\n {\n return \\Illuminate\\Http\\Request::createFrom($from, $to);\n }\n\n /**\n * Create an Illuminate request from a Symfony instance.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @return static\n * @static\n */\n public static function createFromBase($request)\n {\n return \\Illuminate\\Http\\Request::createFromBase($request);\n }\n\n /**\n * Clones a request and overrides some of its parameters.\n *\n * @return static\n * @param array|null $query The GET parameters\n * @param array|null $request The POST parameters\n * @param array|null $attributes The request attributes (parameters parsed from the PATH_INFO, ...)\n * @param array|null $cookies The COOKIE parameters\n * @param array|null $files The FILES parameters\n * @param array|null $server The SERVER parameters\n * @static\n */\n public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->duplicate($query, $request, $attributes, $cookies, $files, $server);\n }\n\n /**\n * Whether the request contains a Session object.\n * \n * This method does not give any information about the state of the session object,\n * like whether the session is started or not. It is just a way to check if this Request\n * is associated with a Session instance.\n *\n * @param bool $skipIfUninitialized When true, ignores factories injected by `setSessionFactory`\n * @static\n */\n public static function hasSession($skipIfUninitialized = false)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasSession($skipIfUninitialized);\n }\n\n /**\n * Gets the Session.\n *\n * @throws SessionNotFoundException When session is not set properly\n * @static\n */\n public static function getSession()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getSession();\n }\n\n /**\n * Get the session associated with the request.\n *\n * @return \\Illuminate\\Contracts\\Session\\Session\n * @throws \\RuntimeException\n * @static\n */\n public static function session()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->session();\n }\n\n /**\n * Set the session instance on the request.\n *\n * @param \\Illuminate\\Contracts\\Session\\Session $session\n * @return void\n * @static\n */\n public static function setLaravelSession($session)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setLaravelSession($session);\n }\n\n /**\n * Set the locale for the request instance.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setRequestLocale($locale)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setRequestLocale($locale);\n }\n\n /**\n * Set the default locale for the request instance.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setDefaultRequestLocale($locale)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setDefaultRequestLocale($locale);\n }\n\n /**\n * Get the user making the request.\n *\n * @param string|null $guard\n * @return mixed\n * @static\n */\n public static function user($guard = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->user($guard);\n }\n\n /**\n * Get the route handling the request.\n *\n * @param string|null $param\n * @param mixed $default\n * @return ($param is null ? \\Illuminate\\Routing\\Route : object|string|null)\n * @static\n */\n public static function route($param = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->route($param, $default);\n }\n\n /**\n * Get a unique fingerprint for the request / route / IP address.\n *\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function fingerprint()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fingerprint();\n }\n\n /**\n * Set the JSON payload for the request.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\InputBag $json\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setJson($json)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setJson($json);\n }\n\n /**\n * Get the user resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function getUserResolver()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUserResolver();\n }\n\n /**\n * Set the user resolver callback.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setUserResolver($callback)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setUserResolver($callback);\n }\n\n /**\n * Get the route resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function getRouteResolver()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRouteResolver();\n }\n\n /**\n * Set the route resolver callback.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setRouteResolver($callback)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setRouteResolver($callback);\n }\n\n /**\n * Get all of the input and files for the request.\n *\n * @return array\n * @static\n */\n public static function toArray()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->toArray();\n }\n\n /**\n * Determine if the given offset exists.\n *\n * @param string $offset\n * @return bool\n * @static\n */\n public static function offsetExists($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->offsetExists($offset);\n }\n\n /**\n * Get the value at the given offset.\n *\n * @param string $offset\n * @return mixed\n * @static\n */\n public static function offsetGet($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->offsetGet($offset);\n }\n\n /**\n * Set the value at the given offset.\n *\n * @param string $offset\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($offset, $value)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->offsetSet($offset, $value);\n }\n\n /**\n * Remove the value at the given offset.\n *\n * @param string $offset\n * @return void\n * @static\n */\n public static function offsetUnset($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->offsetUnset($offset);\n }\n\n /**\n * Sets the parameters for this request.\n * \n * This method also re-initializes all properties.\n *\n * @param array $query The GET parameters\n * @param array $request The POST parameters\n * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...)\n * @param array $cookies The COOKIE parameters\n * @param array $files The FILES parameters\n * @param array $server The SERVER parameters\n * @param string|resource|null $content The raw body data\n * @static\n */\n public static function initialize($query = [], $request = [], $attributes = [], $cookies = [], $files = [], $server = [], $content = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->initialize($query, $request, $attributes, $cookies, $files, $server, $content);\n }\n\n /**\n * Creates a new request with values from PHP's super globals.\n *\n * @static\n */\n public static function createFromGlobals()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::createFromGlobals();\n }\n\n /**\n * Creates a Request based on a given URI and configuration.\n * \n * The information contained in the URI always take precedence\n * over the other information (server and parameters).\n *\n * @param string $uri The URI\n * @param string $method The HTTP method\n * @param array $parameters The query (GET) or request (POST) parameters\n * @param array $cookies The request cookies ($_COOKIE)\n * @param array $files The request files ($_FILES)\n * @param array $server The server parameters ($_SERVER)\n * @param string|resource|null $content The raw body data\n * @throws BadRequestException When the URI is invalid\n * @static\n */\n public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::create($uri, $method, $parameters, $cookies, $files, $server, $content);\n }\n\n /**\n * Sets a callable able to create a Request instance.\n * \n * This is mainly useful when you need to override the Request class\n * to keep BC with an existing system. It should not be used for any\n * other purpose.\n *\n * @static\n */\n public static function setFactory($callable)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setFactory($callable);\n }\n\n /**\n * Overrides the PHP global variables according to this request instance.\n * \n * It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE.\n * $_FILES is never overridden, see rfc1867\n *\n * @static\n */\n public static function overrideGlobals()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->overrideGlobals();\n }\n\n /**\n * Sets a list of trusted proxies.\n * \n * You should only list the reverse proxies that you manage directly.\n *\n * @param array $proxies A list of trusted proxies, the string 'REMOTE_ADDR' will be replaced with $_SERVER['REMOTE_ADDR'] and 'PRIVATE_SUBNETS' by IpUtils::PRIVATE_SUBNETS\n * @param int-mask-of<Request::HEADER_*> $trustedHeaderSet A bit field to set which headers to trust from your proxies\n * @static\n */\n public static function setTrustedProxies($proxies, $trustedHeaderSet)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setTrustedProxies($proxies, $trustedHeaderSet);\n }\n\n /**\n * Gets the list of trusted proxies.\n *\n * @return string[]\n * @static\n */\n public static function getTrustedProxies()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedProxies();\n }\n\n /**\n * Gets the set of trusted headers from trusted proxies.\n *\n * @return int A bit field of Request::HEADER_* that defines which headers are trusted from your proxies\n * @static\n */\n public static function getTrustedHeaderSet()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedHeaderSet();\n }\n\n /**\n * Sets a list of trusted host patterns.\n * \n * You should only list the hosts you manage using regexs.\n *\n * @param array $hostPatterns A list of trusted host patterns\n * @static\n */\n public static function setTrustedHosts($hostPatterns)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setTrustedHosts($hostPatterns);\n }\n\n /**\n * Gets the list of trusted host patterns.\n *\n * @return string[]\n * @static\n */\n public static function getTrustedHosts()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedHosts();\n }\n\n /**\n * Normalizes a query string.\n * \n * It builds a normalized query string, where keys/value pairs are alphabetized,\n * have consistent escaping and unneeded delimiters are removed.\n *\n * @static\n */\n public static function normalizeQueryString($qs)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::normalizeQueryString($qs);\n }\n\n /**\n * Enables support for the _method request parameter to determine the intended HTTP method.\n * \n * Be warned that enabling this feature might lead to CSRF issues in your code.\n * Check that you are using CSRF tokens when required.\n * If the HTTP method parameter override is enabled, an html-form with method \"POST\" can be altered\n * and used to send a \"PUT\" or \"DELETE\" request via the _method request parameter.\n * If these methods are not protected against CSRF, this presents a possible vulnerability.\n * \n * The HTTP method can only be overridden when the real HTTP method is POST.\n *\n * @static\n */\n public static function enableHttpMethodParameterOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::enableHttpMethodParameterOverride();\n }\n\n /**\n * Checks whether support for the _method request parameter is enabled.\n *\n * @static\n */\n public static function getHttpMethodParameterOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getHttpMethodParameterOverride();\n }\n\n /**\n * Sets the list of HTTP methods that can be overridden.\n * \n * Set to null to allow all methods to be overridden (default). Set to an\n * empty array to disallow overrides entirely. Otherwise, provide the list\n * of uppercased method names that are allowed.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\uppercase-string[]|null $methods\n * @static\n */\n public static function setAllowedHttpMethodOverride($methods)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setAllowedHttpMethodOverride($methods);\n }\n\n /**\n * Gets the list of HTTP methods that can be overridden.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\uppercase-string[]|null\n * @static\n */\n public static function getAllowedHttpMethodOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getAllowedHttpMethodOverride();\n }\n\n /**\n * Whether the request contains a Session which was started in one of the\n * previous requests.\n *\n * @static\n */\n public static function hasPreviousSession()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasPreviousSession();\n }\n\n /**\n * @static\n */\n public static function setSession($session)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setSession($session);\n }\n\n /**\n * @internal\n * @param callable(): SessionInterface $factory\n * @static\n */\n public static function setSessionFactory($factory)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setSessionFactory($factory);\n }\n\n /**\n * Returns the client IP addresses.\n * \n * In the returned array the most trusted IP address is first, and the\n * least trusted one last. The \"real\" client IP address is the last one,\n * but this is also the least trusted one. Trusted proxies are stripped.\n * \n * Use this method carefully; you should use getClientIp() instead.\n *\n * @see getClientIp()\n * @static\n */\n public static function getClientIps()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getClientIps();\n }\n\n /**\n * Returns the client IP address.\n * \n * This method can read the client IP address from the \"X-Forwarded-For\" header\n * when trusted proxies were set via \"setTrustedProxies()\". The \"X-Forwarded-For\"\n * header value is a comma+space separated list of IP addresses, the left-most\n * being the original client, and each successive proxy that passed the request\n * adding the IP address where it received the request from.\n * \n * If your reverse proxy uses a different header name than \"X-Forwarded-For\",\n * (\"Client-Ip\" for instance), configure it via the $trustedHeaderSet\n * argument of the Request::setTrustedProxies() method instead.\n *\n * @see getClientIps()\n * @see https://wikipedia.org/wiki/X-Forwarded-For\n * @static\n */\n public static function getClientIp()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getClientIp();\n }\n\n /**\n * Returns current script name.\n *\n * @static\n */\n public static function getScriptName()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getScriptName();\n }\n\n /**\n * Returns the path being requested relative to the executed script.\n * \n * The path info always starts with a /.\n * \n * Suppose this request is instantiated from /mysite on localhost:\n * \n * * http://localhost/mysite returns an empty string\n * * http://localhost/mysite/about returns '/about'\n * * http://localhost/mysite/enco%20ded returns '/enco%20ded'\n * * http://localhost/mysite/about?var=1 returns '/about'\n *\n * @return string The raw path (i.e. not urldecoded)\n * @static\n */\n public static function getPathInfo()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPathInfo();\n }\n\n /**\n * Returns the root path from which this request is executed.\n * \n * Suppose that an index.php file instantiates this request object:\n * \n * * http://localhost/index.php returns an empty string\n * * http://localhost/index.php/page returns an empty string\n * * http://localhost/web/index.php returns '/web'\n * * http://localhost/we%20b/index.php returns '/we%20b'\n *\n * @return string The raw path (i.e. not urldecoded)\n * @static\n */\n public static function getBasePath()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getBasePath();\n }\n\n /**\n * Returns the root URL from which this request is executed.\n * \n * The base URL never ends with a /.\n * \n * This is similar to getBasePath(), except that it also includes the\n * script filename (e.g. index.php) if one exists.\n *\n * @return string The raw URL (i.e. not urldecoded)\n * @static\n */\n public static function getBaseUrl()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getBaseUrl();\n }\n\n /**\n * Gets the request's scheme.\n *\n * @static\n */\n public static function getScheme()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getScheme();\n }\n\n /**\n * Returns the port on which the request is made.\n * \n * This method can read the client port from the \"X-Forwarded-Port\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Port\" header must contain the client port.\n *\n * @return int|string|null Can be a string if fetched from the server bag\n * @static\n */\n public static function getPort()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPort();\n }\n\n /**\n * Returns the user.\n *\n * @static\n */\n public static function getUser()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUser();\n }\n\n /**\n * Returns the password.\n *\n * @static\n */\n public static function getPassword()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPassword();\n }\n\n /**\n * Gets the user info.\n *\n * @return string|null A user name if any and, optionally, scheme-specific information about how to gain authorization to access the server\n * @static\n */\n public static function getUserInfo()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUserInfo();\n }\n\n /**\n * Returns the HTTP host being requested.\n * \n * The port name will be appended to the host if it's non-standard.\n *\n * @static\n */\n public static function getHttpHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getHttpHost();\n }\n\n /**\n * Returns the requested URI (path and query string).\n *\n * @return string The raw URI (i.e. not URI decoded)\n * @static\n */\n public static function getRequestUri()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRequestUri();\n }\n\n /**\n * Gets the scheme and HTTP host.\n * \n * If the URL was called with basic authentication, the user\n * and the password are not added to the generated string.\n *\n * @static\n */\n public static function getSchemeAndHttpHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getSchemeAndHttpHost();\n }\n\n /**\n * Generates a normalized URI (URL) for the Request.\n *\n * @see getQueryString()\n * @static\n */\n public static function getUri()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUri();\n }\n\n /**\n * Generates a normalized URI for the given path.\n *\n * @param string $path A path to use instead of the current one\n * @static\n */\n public static function getUriForPath($path)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUriForPath($path);\n }\n\n /**\n * Returns the path as relative reference from the current Request path.\n * \n * Only the URIs path component (no schema, host etc.) is relevant and must be given.\n * Both paths must be absolute and not contain relative parts.\n * Relative URLs from one resource to another are useful when generating self-contained downloadable document archives.\n * Furthermore, they can be used to reduce the link size in documents.\n * \n * Example target paths, given a base path of \"/a/b/c/d\":\n * - \"/a/b/c/d\" -> \"\"\n * - \"/a/b/c/\" -> \"./\"\n * - \"/a/b/\" -> \"../\"\n * - \"/a/b/c/other\" -> \"other\"\n * - \"/a/x/y\" -> \"../../x/y\"\n *\n * @static\n */\n public static function getRelativeUriForPath($path)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRelativeUriForPath($path);\n }\n\n /**\n * Generates the normalized query string for the Request.\n * \n * It builds a normalized query string, where keys/value pairs are alphabetized\n * and have consistent escaping.\n *\n * @static\n */\n public static function getQueryString()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getQueryString();\n }\n\n /**\n * Checks whether the request is secure or not.\n * \n * This method can read the client protocol from the \"X-Forwarded-Proto\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Proto\" header must contain the protocol: \"https\" or \"http\".\n *\n * @static\n */\n public static function isSecure()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isSecure();\n }\n\n /**\n * Returns the host name.\n * \n * This method can read the client host name from the \"X-Forwarded-Host\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Host\" header must contain the client host name.\n *\n * @throws SuspiciousOperationException when the host name is invalid or not trusted\n * @static\n */\n public static function getHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getHost();\n }\n\n /**\n * Sets the request method.\n *\n * @static\n */\n public static function setMethod($method)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setMethod($method);\n }\n\n /**\n * Gets the request \"intended\" method.\n * \n * If the X-HTTP-Method-Override header is set, and if the method is a POST,\n * then it is used to determine the \"real\" intended HTTP method.\n * \n * The _method request parameter can also be used to determine the HTTP method,\n * but only if enableHttpMethodParameterOverride() has been called.\n * \n * The method is always an uppercased string.\n *\n * @see getRealMethod()\n * @static\n */\n public static function getMethod()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getMethod();\n }\n\n /**\n * Gets the \"real\" request method.\n *\n * @see getMethod()\n * @static\n */\n public static function getRealMethod()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRealMethod();\n }\n\n /**\n * Gets the mime type associated with the format.\n *\n * @static\n */\n public static function getMimeType($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getMimeType($format);\n }\n\n /**\n * Gets the mime types associated with the format.\n *\n * @return string[]\n * @static\n */\n public static function getMimeTypes($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getMimeTypes($format);\n }\n\n /**\n * Gets the format associated with the mime type.\n * \n * Resolution order:\n * 1) Exact match on the full MIME type (e.g. \"application/json\").\n * 2) Match on the canonical MIME type (i.e. before the first \";\" parameter).\n * 3) If the type is \"application/*+suffix\", use the structured syntax suffix\n * mapping (e.g. \"application/foo+json\" → \"json\"), when available.\n * 4) If $subtypeFallback is true and no match was found:\n * - return the MIME subtype (without \"x-\" prefix), provided it does not\n * contain a \"+\" (e.g. \"application/x-yaml\" → \"yaml\", \"text/csv\" → \"csv\").\n *\n * @param string|null $mimeType The mime type to check\n * @param bool $subtypeFallback Whether to fall back to the subtype if no exact match is found\n * @static\n */\n public static function getFormat($mimeType)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getFormat($mimeType);\n }\n\n /**\n * Associates a format with mime types.\n *\n * @param string $format The format to set\n * @param string|string[] $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type)\n * @static\n */\n public static function setFormat($format, $mimeTypes)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setFormat($format, $mimeTypes);\n }\n\n /**\n * Gets the request format.\n * \n * Here is the process to determine the format:\n * \n * * format defined by the user (with setRequestFormat())\n * * _format request attribute\n * * $default\n *\n * @see getPreferredFormat\n * @static\n */\n public static function getRequestFormat($default = 'html')\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRequestFormat($default);\n }\n\n /**\n * Sets the request format.\n *\n * @static\n */\n public static function setRequestFormat($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setRequestFormat($format);\n }\n\n /**\n * Gets the usual name of the format associated with the request's media type (provided in the Content-Type header).\n *\n * @see Request::$formats\n * @static\n */\n public static function getContentTypeFormat()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getContentTypeFormat();\n }\n\n /**\n * Sets the default locale.\n *\n * @static\n */\n public static function setDefaultLocale($locale)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setDefaultLocale($locale);\n }\n\n /**\n * Get the default locale.\n *\n * @static\n */\n public static function getDefaultLocale()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getDefaultLocale();\n }\n\n /**\n * Sets the locale.\n *\n * @static\n */\n public static function setLocale($locale)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setLocale($locale);\n }\n\n /**\n * Get the locale.\n *\n * @static\n */\n public static function getLocale()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getLocale();\n }\n\n /**\n * Checks if the request method is of specified type.\n *\n * @param string $method Uppercase request method (GET, POST etc)\n * @static\n */\n public static function isMethod($method)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethod($method);\n }\n\n /**\n * Checks whether or not the method is safe.\n *\n * @see https://tools.ietf.org/html/rfc7231#section-4.2.1\n * @static\n */\n public static function isMethodSafe()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodSafe();\n }\n\n /**\n * Checks whether or not the method is idempotent.\n *\n * @static\n */\n public static function isMethodIdempotent()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodIdempotent();\n }\n\n /**\n * Checks whether the method is cacheable or not.\n *\n * @see https://tools.ietf.org/html/rfc7231#section-4.2.3\n * @static\n */\n public static function isMethodCacheable()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodCacheable();\n }\n\n /**\n * Returns the protocol version.\n * \n * If the application is behind a proxy, the protocol version used in the\n * requests between the client and the proxy and between the proxy and the\n * server might be different. This returns the former (from the \"Via\" header)\n * if the proxy is trusted (see \"setTrustedProxies()\"), otherwise it returns\n * the latter (from the \"SERVER_PROTOCOL\" server parameter).\n *\n * @static\n */\n public static function getProtocolVersion()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getProtocolVersion();\n }\n\n /**\n * Returns the request body content.\n *\n * @param bool $asResource If true, a resource will be returned\n * @return string|resource\n * @psalm-return ($asResource is true ? resource : string)\n * @static\n */\n public static function getContent($asResource = false)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getContent($asResource);\n }\n\n /**\n * Gets the decoded form or json request body.\n *\n * @throws JsonException When the body cannot be decoded to an array\n * @static\n */\n public static function getPayload()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPayload();\n }\n\n /**\n * Gets the Etags.\n *\n * @static\n */\n public static function getETags()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getETags();\n }\n\n /**\n * @static\n */\n public static function isNoCache()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isNoCache();\n }\n\n /**\n * Gets the preferred format for the response by inspecting, in the following order:\n * * the request format set using setRequestFormat;\n * * the values of the Accept HTTP header.\n * \n * Note that if you use this method, you should send the \"Vary: Accept\" header\n * in the response to prevent any issues with intermediary HTTP caches.\n *\n * @static\n */\n public static function getPreferredFormat($default = 'html')\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPreferredFormat($default);\n }\n\n /**\n * Returns the preferred language.\n *\n * @param string[] $locales An array of ordered available locales\n * @static\n */\n public static function getPreferredLanguage($locales = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPreferredLanguage($locales);\n }\n\n /**\n * Gets a list of languages acceptable by the client browser ordered in the user browser preferences.\n *\n * @return string[]\n * @static\n */\n public static function getLanguages()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getLanguages();\n }\n\n /**\n * Gets a list of charsets acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getCharsets()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getCharsets();\n }\n\n /**\n * Gets a list of encodings acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getEncodings()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getEncodings();\n }\n\n /**\n * Gets a list of content types acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getAcceptableContentTypes()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getAcceptableContentTypes();\n }\n\n /**\n * Returns true if the request is an XMLHttpRequest.\n * \n * It works if your JavaScript library sets an X-Requested-With HTTP header.\n * It is known to work with common JavaScript frameworks:\n *\n * @see https://wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript\n * @static\n */\n public static function isXmlHttpRequest()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isXmlHttpRequest();\n }\n\n /**\n * Checks whether the client browser prefers safe content or not according to RFC8674.\n *\n * @see https://tools.ietf.org/html/rfc8674\n * @static\n */\n public static function preferSafeContent()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->preferSafeContent();\n }\n\n /**\n * Indicates whether this request originated from a trusted proxy.\n * \n * This can be useful to determine whether or not to trust the\n * contents of a proxy-specific header.\n *\n * @static\n */\n public static function isFromTrustedProxy()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isFromTrustedProxy();\n }\n\n /**\n * Filter the given array of rules into an array of rules that are included in precognitive headers.\n *\n * @param array $rules\n * @return array\n * @static\n */\n public static function filterPrecognitiveRules($rules)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->filterPrecognitiveRules($rules);\n }\n\n /**\n * Determine if the request is attempting to be precognitive.\n *\n * @return bool\n * @static\n */\n public static function isAttemptingPrecognition()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isAttemptingPrecognition();\n }\n\n /**\n * Determine if the request is precognitive.\n *\n * @return bool\n * @static\n */\n public static function isPrecognitive()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isPrecognitive();\n }\n\n /**\n * Determine if the request is sending JSON.\n *\n * @return bool\n * @static\n */\n public static function isJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isJson();\n }\n\n /**\n * Determine if the current request probably expects a JSON response.\n *\n * @return bool\n * @static\n */\n public static function expectsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->expectsJson();\n }\n\n /**\n * Determine if the current request is asking for JSON.\n *\n * @return bool\n * @static\n */\n public static function wantsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->wantsJson();\n }\n\n /**\n * Determines whether the current requests accepts a given content type.\n *\n * @param string|array $contentTypes\n * @return bool\n * @static\n */\n public static function accepts($contentTypes)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->accepts($contentTypes);\n }\n\n /**\n * Return the most suitable content type from the given array based on content negotiation.\n *\n * @param string|array $contentTypes\n * @return string|null\n * @static\n */\n public static function prefers($contentTypes)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->prefers($contentTypes);\n }\n\n /**\n * Determine if the current request accepts any content type.\n *\n * @return bool\n * @static\n */\n public static function acceptsAnyContentType()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsAnyContentType();\n }\n\n /**\n * Determines whether a request accepts JSON.\n *\n * @return bool\n * @static\n */\n public static function acceptsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsJson();\n }\n\n /**\n * Determines whether a request accepts HTML.\n *\n * @return bool\n * @static\n */\n public static function acceptsHtml()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsHtml();\n }\n\n /**\n * Determine if the given content types match.\n *\n * @param string $actual\n * @param string $type\n * @return bool\n * @static\n */\n public static function matchesType($actual, $type)\n {\n return \\Illuminate\\Http\\Request::matchesType($actual, $type);\n }\n\n /**\n * Get the data format expected in the response.\n *\n * @param string $default\n * @return string\n * @static\n */\n public static function format($default = 'html')\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->format($default);\n }\n\n /**\n * Retrieve an old input item.\n *\n * @param string|null $key\n * @param \\Illuminate\\Database\\Eloquent\\Model|string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function old($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->old($key, $default);\n }\n\n /**\n * Flash the input for the current request to the session.\n *\n * @return void\n * @static\n */\n public static function flash()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flash();\n }\n\n /**\n * Flash only some of the input to the session.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function flashOnly($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flashOnly($keys);\n }\n\n /**\n * Flash only some of the input to the session.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function flashExcept($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flashExcept($keys);\n }\n\n /**\n * Flush all of the old input from the session.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flush();\n }\n\n /**\n * Retrieve a server variable from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function server($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->server($key, $default);\n }\n\n /**\n * Determine if a header is set on the request.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasHeader($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasHeader($key);\n }\n\n /**\n * Retrieve a header from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function header($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->header($key, $default);\n }\n\n /**\n * Get the bearer token from the request headers.\n *\n * @return string|null\n * @static\n */\n public static function bearerToken()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->bearerToken();\n }\n\n /**\n * Get the keys for all of the input and files.\n *\n * @return array\n * @static\n */\n public static function keys()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->keys();\n }\n\n /**\n * Get all of the input and files for the request.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function all($keys = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->all($keys);\n }\n\n /**\n * Retrieve an input item from the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function input($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->input($key, $default);\n }\n\n /**\n * Retrieve input from the request as a Fluent object instance.\n *\n * @param array|string|null $key\n * @return \\Illuminate\\Support\\Fluent\n * @static\n */\n public static function fluent($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fluent($key);\n }\n\n /**\n * Retrieve a query string item from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function query($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->query($key, $default);\n }\n\n /**\n * Retrieve a request payload item from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function post($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->post($key, $default);\n }\n\n /**\n * Determine if a cookie is set on the request.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasCookie($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasCookie($key);\n }\n\n /**\n * Retrieve a cookie from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function cookie($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->cookie($key, $default);\n }\n\n /**\n * Get an array of all of the files on the request.\n *\n * @return array<string, \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]>\n * @static\n */\n public static function allFiles()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->allFiles();\n }\n\n /**\n * Determine if the uploaded data contains a file.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasFile($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasFile($key);\n }\n\n /**\n * Retrieve a file from the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return ($key is null ? array<string, \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]> : \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]|null)\n * @static\n */\n public static function file($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->file($key, $default);\n }\n\n /**\n * Dump the items.\n *\n * @param mixed $keys\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function dump($keys = [])\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->dump($keys);\n }\n\n /**\n * Dump the given arguments and terminate execution.\n *\n * @param mixed $args\n * @return never\n * @static\n */\n public static function dd(...$args)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->dd(...$args);\n }\n\n /**\n * Determine if the data contains a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function exists($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->exists($key);\n }\n\n /**\n * Determine if the data contains a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if the instance contains any of the given keys.\n *\n * @param string|array $keys\n * @return bool\n * @static\n */\n public static function hasAny($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasAny($keys);\n }\n\n /**\n * Apply the callback if the instance contains the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenHas($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenHas($key, $callback, $default);\n }\n\n /**\n * Determine if the instance contains a non-empty value for the given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function filled($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->filled($key);\n }\n\n /**\n * Determine if the instance contains an empty value for the given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function isNotFilled($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isNotFilled($key);\n }\n\n /**\n * Determine if the instance contains a non-empty value for any of the given keys.\n *\n * @param string|array $keys\n * @return bool\n * @static\n */\n public static function anyFilled($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->anyFilled($keys);\n }\n\n /**\n * Apply the callback if the instance contains a non-empty value for the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenFilled($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenFilled($key, $callback, $default);\n }\n\n /**\n * Determine if the instance is missing a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->missing($key);\n }\n\n /**\n * Apply the callback if the instance is missing the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenMissing($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenMissing($key, $callback, $default);\n }\n\n /**\n * Retrieve data from the instance as a Stringable instance.\n *\n * @param string $key\n * @param mixed $default\n * @return \\Illuminate\\Support\\Stringable\n * @static\n */\n public static function str($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->str($key, $default);\n }\n\n /**\n * Retrieve data from the instance as a Stringable instance.\n *\n * @param string $key\n * @param mixed $default\n * @return \\Illuminate\\Support\\Stringable\n * @static\n */\n public static function string($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->string($key, $default);\n }\n\n /**\n * Retrieve data as a boolean value.\n * \n * Returns true when value is \"1\", \"true\", \"on\", and \"yes\". Otherwise, returns false.\n *\n * @param string|null $key\n * @param bool $default\n * @return bool\n * @static\n */\n public static function boolean($key = null, $default = false)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->boolean($key, $default);\n }\n\n /**\n * Retrieve data as an integer value.\n *\n * @param string $key\n * @param int $default\n * @return int\n * @static\n */\n public static function integer($key, $default = 0)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->integer($key, $default);\n }\n\n /**\n * Retrieve data as a float value.\n *\n * @param string $key\n * @param float $default\n * @return float\n * @static\n */\n public static function float($key, $default = 0.0)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->float($key, $default);\n }\n\n /**\n * Retrieve data from the instance as a Carbon instance.\n *\n * @param string $key\n * @param string|null $format\n * @param \\UnitEnum|string|null $tz\n * @return \\Illuminate\\Support\\Carbon|null\n * @throws \\Carbon\\Exceptions\\InvalidFormatException\n * @static\n */\n public static function date($key, $format = null, $tz = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->date($key, $format, $tz);\n }\n\n /**\n * Retrieve data from the instance as an enum.\n *\n * @template TEnum of \\BackedEnum\n * @param string $key\n * @param class-string<TEnum> $enumClass\n * @param TEnum|null $default\n * @return TEnum|null\n * @static\n */\n public static function enum($key, $enumClass, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->enum($key, $enumClass, $default);\n }\n\n /**\n * Retrieve data from the instance as an array of enums.\n *\n * @template TEnum of \\BackedEnum\n * @param string $key\n * @param class-string<TEnum> $enumClass\n * @return TEnum[]\n * @static\n */\n public static function enums($key, $enumClass)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->enums($key, $enumClass);\n }\n\n /**\n * Retrieve data from the instance as an array.\n *\n * @param array|string|null $key\n * @return array\n * @static\n */\n public static function array($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->array($key);\n }\n\n /**\n * Retrieve data from the instance as a collection.\n *\n * @param array|string|null $key\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function collect($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->collect($key);\n }\n\n /**\n * Get a subset containing the provided keys with values from the instance data.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->only($keys);\n }\n\n /**\n * Get all of the data except for a specified array of items.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->except($keys);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Http\\Request::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Http\\Request::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Http\\Request::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Http\\Request::flushMacros();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validate($rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validate($rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param string $errorBag\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validateWithBag($errorBag, $rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validateWithBag($errorBag, $rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignature($absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignature($absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @static\n */\n public static function hasValidRelativeSignature()\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignature();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignatureWhileIgnoring($ignoreQuery, $absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @static\n */\n public static function hasValidRelativeSignatureWhileIgnoring($ignoreQuery = [])\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignatureWhileIgnoring($ignoreQuery);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\ResponseFactory\n */\n class Response {\n /**\n * Create a new response instance.\n *\n * @param mixed $content\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function make($content = '', $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->make($content, $status, $headers);\n }\n\n /**\n * Create a new \"no content\" response.\n *\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function noContent($status = 204, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->noContent($status, $headers);\n }\n\n /**\n * Create a new response for a given view.\n *\n * @param string|array $view\n * @param array $data\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function view($view, $data = [], $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->view($view, $data, $status, $headers);\n }\n\n /**\n * Create a new JSON response instance.\n *\n * @param mixed $data\n * @param int $status\n * @param array $headers\n * @param int $options\n * @return \\Illuminate\\Http\\JsonResponse\n * @static\n */\n public static function json($data = [], $status = 200, $headers = [], $options = 0)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->json($data, $status, $headers, $options);\n }\n\n /**\n * Create a new JSONP response instance.\n *\n * @param string $callback\n * @param mixed $data\n * @param int $status\n * @param array $headers\n * @param int $options\n * @return \\Illuminate\\Http\\JsonResponse\n * @static\n */\n public static function jsonp($callback, $data = [], $status = 200, $headers = [], $options = 0)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->jsonp($callback, $data, $status, $headers, $options);\n }\n\n /**\n * Create a new event stream response.\n *\n * @param \\Closure $callback\n * @param array $headers\n * @param \\Illuminate\\Http\\StreamedEvent|string|null $endStreamWith\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function eventStream($callback, $headers = [], $endStreamWith = '</stream>')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->eventStream($callback, $headers, $endStreamWith);\n }\n\n /**\n * Create a new streamed response instance.\n *\n * @param callable|null $callback\n * @param int $status\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function stream($callback, $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->stream($callback, $status, $headers);\n }\n\n /**\n * Create a new streamed JSON response instance.\n *\n * @param array $data\n * @param int $status\n * @param array $headers\n * @param int $encodingOptions\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedJsonResponse\n * @static\n */\n public static function streamJson($data, $status = 200, $headers = [], $encodingOptions = 15)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->streamJson($data, $status, $headers, $encodingOptions);\n }\n\n /**\n * Create a new streamed response instance as a file download.\n *\n * @param callable $callback\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @throws \\Illuminate\\Routing\\Exceptions\\StreamedResponseException\n * @static\n */\n public static function streamDownload($callback, $name = null, $headers = [], $disposition = 'attachment')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->streamDownload($callback, $name, $headers, $disposition);\n }\n\n /**\n * Create a new file download response.\n *\n * @param \\SplFileInfo|string $file\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n * @static\n */\n public static function download($file, $name = null, $headers = [], $disposition = 'attachment')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->download($file, $name, $headers, $disposition);\n }\n\n /**\n * Return the raw contents of a binary file.\n *\n * @param \\SplFileInfo|string $file\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n * @static\n */\n public static function file($file, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->file($file, $headers);\n }\n\n /**\n * Create a new redirect response to the given path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectTo($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectTo($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to a named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToRoute($route, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToRoute($route, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a controller action.\n *\n * @param array|string $action\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToAction($action, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToAction($action, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response, while putting the current URL in the session.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectGuest($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectGuest($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the previously intended location.\n *\n * @param string $default\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToIntended($default = '/', $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToIntended($default, $status, $headers, $secure);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\ResponseFactory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\ResponseFactory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\ResponseFactory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\ResponseFactory::flushMacros();\n }\n\n /**\n * @see \\Jiminny\\Providers\\ResponseMacroServiceProvider::boot()\n * @param mixed $data\n * @param mixed $status\n * @param array $headers\n * @param mixed $options\n * @static\n */\n public static function twiml($data = null, $status = 200, $headers = [], $options = 0)\n {\n return \\Illuminate\\Routing\\ResponseFactory::twiml($data, $status, $headers, $options);\n }\n\n }\n /**\n * @method static \\Illuminate\\Routing\\RouteRegistrar attribute(string $key, mixed $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereAlpha(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereAlphaNumeric(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereNumber(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereUlid(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereUuid(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereIn(array|string $parameters, array $values)\n * @method static \\Illuminate\\Routing\\RouteRegistrar as(string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar can(\\UnitEnum|string $ability, array|string $models = [])\n * @method static \\Illuminate\\Routing\\RouteRegistrar controller(string $controller)\n * @method static \\Illuminate\\Routing\\RouteRegistrar domain(\\BackedEnum|string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar middleware(array|string|null $middleware)\n * @method static \\Illuminate\\Routing\\RouteRegistrar missing(\\Closure $missing)\n * @method static \\Illuminate\\Routing\\RouteRegistrar name(\\BackedEnum|string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar namespace(string|null $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar prefix(string $prefix)\n * @method static \\Illuminate\\Routing\\RouteRegistrar scopeBindings()\n * @method static \\Illuminate\\Routing\\RouteRegistrar where(array $where)\n * @method static \\Illuminate\\Routing\\RouteRegistrar withoutMiddleware(array|string $middleware)\n * @method static \\Illuminate\\Routing\\RouteRegistrar withoutScopedBindings()\n * @see \\Illuminate\\Routing\\Router\n */\n class Route {\n /**\n * Register a new GET route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function get($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->get($uri, $action);\n }\n\n /**\n * Register a new POST route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function post($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->post($uri, $action);\n }\n\n /**\n * Register a new PUT route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function put($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->put($uri, $action);\n }\n\n /**\n * Register a new PATCH route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function patch($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->patch($uri, $action);\n }\n\n /**\n * Register a new DELETE route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function delete($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->delete($uri, $action);\n }\n\n /**\n * Register a new OPTIONS route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function options($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->options($uri, $action);\n }\n\n /**\n * Register a new route responding to all verbs.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function any($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->any($uri, $action);\n }\n\n /**\n * Register a new fallback route with the router.\n *\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function fallback($action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->fallback($action);\n }\n\n /**\n * Create a redirect from one URI to another.\n *\n * @param string $uri\n * @param string $destination\n * @param int $status\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function redirect($uri, $destination, $status = 302)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->redirect($uri, $destination, $status);\n }\n\n /**\n * Create a permanent redirect from one URI to another.\n *\n * @param string $uri\n * @param string $destination\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function permanentRedirect($uri, $destination)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->permanentRedirect($uri, $destination);\n }\n\n /**\n * Register a new route that returns a view.\n *\n * @param string $uri\n * @param string $view\n * @param array $data\n * @param int|array $status\n * @param array $headers\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function view($uri, $view, $data = [], $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->view($uri, $view, $data, $status, $headers);\n }\n\n /**\n * Register a new route with the given verbs.\n *\n * @param array|string $methods\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function match($methods, $uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->match($methods, $uri, $action);\n }\n\n /**\n * Register an array of resource controllers.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function resources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->resources($resources, $options);\n }\n\n /**\n * Register an array of resource controllers that can be soft deleted.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function softDeletableResources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->softDeletableResources($resources, $options);\n }\n\n /**\n * Route a resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingResourceRegistration\n * @static\n */\n public static function resource($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resource($name, $controller, $options);\n }\n\n /**\n * Register an array of API resource controllers.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function apiResources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->apiResources($resources, $options);\n }\n\n /**\n * Route an API resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingResourceRegistration\n * @static\n */\n public static function apiResource($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->apiResource($name, $controller, $options);\n }\n\n /**\n * Register an array of singleton resource controllers.\n *\n * @param array $singletons\n * @param array $options\n * @return void\n * @static\n */\n public static function singletons($singletons, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->singletons($singletons, $options);\n }\n\n /**\n * Route a singleton resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingSingletonResourceRegistration\n * @static\n */\n public static function singleton($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->singleton($name, $controller, $options);\n }\n\n /**\n * Register an array of API singleton resource controllers.\n *\n * @param array $singletons\n * @param array $options\n * @return void\n * @static\n */\n public static function apiSingletons($singletons, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->apiSingletons($singletons, $options);\n }\n\n /**\n * Route an API singleton resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingSingletonResourceRegistration\n * @static\n */\n public static function apiSingleton($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->apiSingleton($name, $controller, $options);\n }\n\n /**\n * Create a route group with shared attributes.\n *\n * @param array $attributes\n * @param \\Closure|array|string $routes\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function group($attributes, $routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->group($attributes, $routes);\n }\n\n /**\n * Merge the given array with the last group stack.\n *\n * @param array $new\n * @param bool $prependExistingPrefix\n * @return array\n * @static\n */\n public static function mergeWithLastGroup($new, $prependExistingPrefix = true)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->mergeWithLastGroup($new, $prependExistingPrefix);\n }\n\n /**\n * Get the prefix from the last group on the stack.\n *\n * @return string\n * @static\n */\n public static function getLastGroupPrefix()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getLastGroupPrefix();\n }\n\n /**\n * Add a route to the underlying route collection.\n *\n * @param array|string $methods\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function addRoute($methods, $uri, $action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->addRoute($methods, $uri, $action);\n }\n\n /**\n * Create a new Route object.\n *\n * @param array|string $methods\n * @param string $uri\n * @param mixed $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function newRoute($methods, $uri, $action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->newRoute($methods, $uri, $action);\n }\n\n /**\n * Return the response returned by the given route.\n *\n * @param string $name\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function respondWithRoute($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->respondWithRoute($name);\n }\n\n /**\n * Dispatch the request to the application.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function dispatch($request)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->dispatch($request);\n }\n\n /**\n * Dispatch the request to a route and return the response.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function dispatchToRoute($request)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->dispatchToRoute($request);\n }\n\n /**\n * Gather the middleware for the given route with resolved class names.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return array\n * @static\n */\n public static function gatherRouteMiddleware($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->gatherRouteMiddleware($route);\n }\n\n /**\n * Resolve a flat array of middleware classes from the provided array.\n *\n * @param array $middleware\n * @param array $excluded\n * @return array\n * @static\n */\n public static function resolveMiddleware($middleware, $excluded = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resolveMiddleware($middleware, $excluded);\n }\n\n /**\n * Create a response instance from the given value.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param mixed $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function prepareResponse($request, $response)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->prepareResponse($request, $response);\n }\n\n /**\n * Static version of prepareResponse.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param mixed $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function toResponse($request, $response)\n {\n return \\Illuminate\\Routing\\Router::toResponse($request, $response);\n }\n\n /**\n * Substitute the route bindings onto the route.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return \\Illuminate\\Routing\\Route\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<\\Illuminate\\Database\\Eloquent\\Model>\n * @throws \\Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException\n * @static\n */\n public static function substituteBindings($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->substituteBindings($route);\n }\n\n /**\n * Substitute the implicit route bindings for the given route.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return void\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<\\Illuminate\\Database\\Eloquent\\Model>\n * @throws \\Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException\n * @static\n */\n public static function substituteImplicitBindings($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->substituteImplicitBindings($route);\n }\n\n /**\n * Register a callback to run after implicit bindings are substituted.\n *\n * @param callable $callback\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function substituteImplicitBindingsUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->substituteImplicitBindingsUsing($callback);\n }\n\n /**\n * Register a route matched event listener.\n *\n * @param string|callable $callback\n * @return void\n * @static\n */\n public static function matched($callback)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->matched($callback);\n }\n\n /**\n * Get all of the defined middleware short-hand names.\n *\n * @return array\n * @static\n */\n public static function getMiddleware()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getMiddleware();\n }\n\n /**\n * Register a short-hand name for a middleware.\n *\n * @param string $name\n * @param string $class\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function aliasMiddleware($name, $class)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->aliasMiddleware($name, $class);\n }\n\n /**\n * Check if a middlewareGroup with the given name exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMiddlewareGroup($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->hasMiddlewareGroup($name);\n }\n\n /**\n * Get all of the defined middleware groups.\n *\n * @return array\n * @static\n */\n public static function getMiddlewareGroups()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getMiddlewareGroups();\n }\n\n /**\n * Register a group of middleware.\n *\n * @param string $name\n * @param array $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function middlewareGroup($name, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->middlewareGroup($name, $middleware);\n }\n\n /**\n * Add a middleware to the beginning of a middleware group.\n * \n * If the middleware is already in the group, it will not be added again.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function prependMiddlewareToGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->prependMiddlewareToGroup($group, $middleware);\n }\n\n /**\n * Add a middleware to the end of a middleware group.\n * \n * If the middleware is already in the group, it will not be added again.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function pushMiddlewareToGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->pushMiddlewareToGroup($group, $middleware);\n }\n\n /**\n * Remove the given middleware from the specified group.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function removeMiddlewareFromGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->removeMiddlewareFromGroup($group, $middleware);\n }\n\n /**\n * Flush the router's middleware groups.\n *\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function flushMiddlewareGroups()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->flushMiddlewareGroups();\n }\n\n /**\n * Add a new route parameter binder.\n *\n * @param string $key\n * @param string|callable $binder\n * @return void\n * @static\n */\n public static function bind($key, $binder)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->bind($key, $binder);\n }\n\n /**\n * Register a model binder for a wildcard.\n *\n * @param string $key\n * @param string $class\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function model($key, $class, $callback = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->model($key, $class, $callback);\n }\n\n /**\n * Get the binding callback for a given binding.\n *\n * @param string $key\n * @return \\Closure|null\n * @static\n */\n public static function getBindingCallback($key)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getBindingCallback($key);\n }\n\n /**\n * Get the global \"where\" patterns.\n *\n * @return array\n * @static\n */\n public static function getPatterns()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getPatterns();\n }\n\n /**\n * Set a global where pattern on all routes.\n *\n * @param string $key\n * @param string $pattern\n * @return void\n * @static\n */\n public static function pattern($key, $pattern)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->pattern($key, $pattern);\n }\n\n /**\n * Set a group of global where patterns on all routes.\n *\n * @param array $patterns\n * @return void\n * @static\n */\n public static function patterns($patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->patterns($patterns);\n }\n\n /**\n * Determine if the router currently has a group stack.\n *\n * @return bool\n * @static\n */\n public static function hasGroupStack()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->hasGroupStack();\n }\n\n /**\n * Get the current group stack for the router.\n *\n * @return array\n * @static\n */\n public static function getGroupStack()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getGroupStack();\n }\n\n /**\n * Get a route parameter for the current route.\n *\n * @param string $key\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function input($key, $default = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->input($key, $default);\n }\n\n /**\n * Get the request currently being dispatched.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function getCurrentRequest()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getCurrentRequest();\n }\n\n /**\n * Get the currently dispatched route instance.\n *\n * @return \\Illuminate\\Routing\\Route|null\n * @static\n */\n public static function getCurrentRoute()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getCurrentRoute();\n }\n\n /**\n * Get the currently dispatched route instance.\n *\n * @return \\Illuminate\\Routing\\Route|null\n * @static\n */\n public static function current()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->current();\n }\n\n /**\n * Check if a route with the given name exists.\n *\n * @param string|array $name\n * @return bool\n * @static\n */\n public static function has($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->has($name);\n }\n\n /**\n * Get the current route name.\n *\n * @return string|null\n * @static\n */\n public static function currentRouteName()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteName();\n }\n\n /**\n * Alias for the \"currentRouteNamed\" method.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function is(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->is(...$patterns);\n }\n\n /**\n * Determine if the current route matches a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function currentRouteNamed(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteNamed(...$patterns);\n }\n\n /**\n * Get the current route action.\n *\n * @return string|null\n * @static\n */\n public static function currentRouteAction()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteAction();\n }\n\n /**\n * Alias for the \"currentRouteUses\" method.\n *\n * @param array|string $patterns\n * @return bool\n * @static\n */\n public static function uses(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->uses(...$patterns);\n }\n\n /**\n * Determine if the current route action matches a given action.\n *\n * @param string $action\n * @return bool\n * @static\n */\n public static function currentRouteUses($action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteUses($action);\n }\n\n /**\n * Set the unmapped global resource parameters to singular.\n *\n * @param bool $singular\n * @return void\n * @static\n */\n public static function singularResourceParameters($singular = true)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->singularResourceParameters($singular);\n }\n\n /**\n * Set the global resource parameter mapping.\n *\n * @param array $parameters\n * @return void\n * @static\n */\n public static function resourceParameters($parameters = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->resourceParameters($parameters);\n }\n\n /**\n * Get or set the verbs used in the resource URIs.\n *\n * @param array $verbs\n * @return array|null\n * @static\n */\n public static function resourceVerbs($verbs = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resourceVerbs($verbs);\n }\n\n /**\n * Get the underlying route collection.\n *\n * @return \\Illuminate\\Routing\\RouteCollectionInterface\n * @static\n */\n public static function getRoutes()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getRoutes();\n }\n\n /**\n * Set the route collection instance.\n *\n * @param \\Illuminate\\Routing\\RouteCollection $routes\n * @return void\n * @static\n */\n public static function setRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->setRoutes($routes);\n }\n\n /**\n * Set the compiled route collection instance.\n *\n * @param array $routes\n * @return void\n * @static\n */\n public static function setCompiledRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->setCompiledRoutes($routes);\n }\n\n /**\n * Remove any duplicate middleware from the given array.\n *\n * @param array $middleware\n * @return array\n * @static\n */\n public static function uniqueMiddleware($middleware)\n {\n return \\Illuminate\\Routing\\Router::uniqueMiddleware($middleware);\n }\n\n /**\n * Set the container instance used by the router.\n *\n * @param \\Illuminate\\Container\\Container $container\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\Router::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\Router::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\Router::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\Router::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Call the given Closure with this instance then return the instance.\n *\n * @param (callable($this): mixed)|null $callback\n * @return ($callback is null ? \\Illuminate\\Support\\HigherOrderTapProxy : $this)\n * @static\n */\n public static function tap($callback = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->tap($callback);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::auth()\n * @param mixed $options\n * @static\n */\n public static function auth($options = [])\n {\n return \\Illuminate\\Routing\\Router::auth($options);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::resetPassword()\n * @static\n */\n public static function resetPassword()\n {\n return \\Illuminate\\Routing\\Router::resetPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::confirmPassword()\n * @static\n */\n public static function confirmPassword()\n {\n return \\Illuminate\\Routing\\Router::confirmPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::emailVerification()\n * @static\n */\n public static function emailVerification()\n {\n return \\Illuminate\\Routing\\Router::emailVerification();\n }\n\n }\n /**\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes withoutOverlapping(int $expiresAt = 1440)\n * @method static void mergeAttributes(\\Illuminate\\Console\\Scheduling\\Event $event)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes user(string $user)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes environments(mixed $environments)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes evenInMaintenanceMode()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes onOneServer()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes runInBackground()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes when(\\Closure|bool $callback)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes skip(\\Closure|bool $callback)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes name(string $description)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes description(string $description)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes cron(string $expression)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes between(string $startTime, string $endTime)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes unlessBetween(string $startTime, string $endTime)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everySecond()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFiveSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTenSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFifteenSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwentySeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThirtySeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyMinute()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThreeMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFourMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFiveMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTenMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFifteenMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThirtyMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes hourly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes hourlyAt(array|string|int|int[] $offset)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyOddHour(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThreeHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFourHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everySixHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes daily()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes at(string $time)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes dailyAt(string $time)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceDaily(int $first = 1, int $second = 13)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceDailyAt(int $first = 1, int $second = 13, int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekends()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes mondays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes tuesdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes wednesdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes thursdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes fridays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes saturdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes sundays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weeklyOn(mixed $dayOfWeek, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes monthly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes monthlyOn(int $dayOfMonth = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceMonthly(int $first = 1, int $second = 16, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes lastDayOfMonth(string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes quarterly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes quarterlyOn(int $dayOfQuarter = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes yearly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes yearlyOn(int $month = 1, int|string $dayOfMonth = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes days(mixed $days)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes timezone(\\UnitEnum|\\DateTimeZone|string $timezone)\n * @see \\Illuminate\\Console\\Scheduling\\Schedule\n */\n class Schedule {\n /**\n * Add a new callback event to the schedule.\n *\n * @param string|callable $callback\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\CallbackEvent\n * @static\n */\n public static function call($callback, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->call($callback, $parameters);\n }\n\n /**\n * Add a new Artisan command event to the schedule.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command|string $command\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\Event\n * @static\n */\n public static function command($command, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->command($command, $parameters);\n }\n\n /**\n * Add a new job callback event to the schedule.\n *\n * @param object|string $job\n * @param \\UnitEnum|string|null $queue\n * @param \\UnitEnum|string|null $connection\n * @return \\Illuminate\\Console\\Scheduling\\CallbackEvent\n * @static\n */\n public static function job($job, $queue = null, $connection = null)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->job($job, $queue, $connection);\n }\n\n /**\n * Add a new command event to the schedule.\n *\n * @param string $command\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\Event\n * @static\n */\n public static function exec($command, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->exec($command, $parameters);\n }\n\n /**\n * Create new schedule group.\n *\n * @param \\Illuminate\\Console\\Scheduling\\Event $event\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function group($events)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n $instance->group($events);\n }\n\n /**\n * Compile array input for a command.\n *\n * @param string|int $key\n * @param array $value\n * @return string\n * @static\n */\n public static function compileArrayInput($key, $value)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->compileArrayInput($key, $value);\n }\n\n /**\n * Determine if the server is allowed to run this event.\n *\n * @param \\Illuminate\\Console\\Scheduling\\Event $event\n * @param \\DateTimeInterface $time\n * @return bool\n * @static\n */\n public static function serverShouldRun($event, $time)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->serverShouldRun($event, $time);\n }\n\n /**\n * Get all of the events on the schedule that are due.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dueEvents($app)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->dueEvents($app);\n }\n\n /**\n * Get all of the events on the schedule.\n *\n * @return \\Illuminate\\Console\\Scheduling\\Event[]\n * @static\n */\n public static function events()\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->events();\n }\n\n /**\n * Specify the cache store that should be used to store mutexes.\n *\n * @param string $store\n * @return \\Illuminate\\Console\\Scheduling\\Schedule\n * @static\n */\n public static function useCache($store)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->useCache($store);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Console\\Scheduling\\Schedule::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Database\\Schema\\Builder\n */\n class Schema {\n /**\n * Drop all tables from the database.\n *\n * @return void\n * @static\n */\n public static function dropAllTables()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllTables();\n }\n\n /**\n * Drop all views from the database.\n *\n * @return void\n * @static\n */\n public static function dropAllViews()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllViews();\n }\n\n /**\n * Get the names of current schemas for the connection.\n *\n * @return string[]|null\n * @static\n */\n public static function getCurrentSchemaListing()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getCurrentSchemaListing();\n }\n\n /**\n * Set the default string length for migrations.\n *\n * @param int $length\n * @return void\n * @static\n */\n public static function defaultStringLength($length)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultStringLength($length);\n }\n\n /**\n * Set the default time precision for migrations.\n *\n * @static\n */\n public static function defaultTimePrecision($precision)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n return \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultTimePrecision($precision);\n }\n\n /**\n * Set the default morph key type for migrations.\n *\n * @param string $type\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function defaultMorphKeyType($type)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultMorphKeyType($type);\n }\n\n /**\n * Set the default morph key type for migrations to UUIDs.\n *\n * @return void\n * @static\n */\n public static function morphUsingUuids()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::morphUsingUuids();\n }\n\n /**\n * Set the default morph key type for migrations to ULIDs.\n *\n * @return void\n * @static\n */\n public static function morphUsingUlids()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::morphUsingUlids();\n }\n\n /**\n * Create a database in the schema.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function createDatabase($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->createDatabase($name);\n }\n\n /**\n * Drop a database from the schema if the database exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function dropDatabaseIfExists($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->dropDatabaseIfExists($name);\n }\n\n /**\n * Get the schemas that belong to the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, path: string|null, default: bool}>\n * @static\n */\n public static function getSchemas()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getSchemas();\n }\n\n /**\n * Determine if the given table exists.\n *\n * @param string $table\n * @return bool\n * @static\n */\n public static function hasTable($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasTable($table);\n }\n\n /**\n * Determine if the given view exists.\n *\n * @param string $view\n * @return bool\n * @static\n */\n public static function hasView($view)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasView($view);\n }\n\n /**\n * Get the tables that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string|null, schema_qualified_name: string, size: int|null, comment: string|null, collation: string|null, engine: string|null}>\n * @static\n */\n public static function getTables($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTables($schema);\n }\n\n /**\n * Get the names of the tables that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @param bool $schemaQualified\n * @return list<string>\n * @static\n */\n public static function getTableListing($schema = null, $schemaQualified = true)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTableListing($schema, $schemaQualified);\n }\n\n /**\n * Get the views that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string|null, schema_qualified_name: string, definition: string}>\n * @static\n */\n public static function getViews($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getViews($schema);\n }\n\n /**\n * Get the user-defined types that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string, type: string, type: string, category: string, implicit: bool}>\n * @static\n */\n public static function getTypes($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTypes($schema);\n }\n\n /**\n * Determine if the given table has a given column.\n *\n * @param string $table\n * @param string $column\n * @return bool\n * @static\n */\n public static function hasColumn($table, $column)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasColumn($table, $column);\n }\n\n /**\n * Determine if the given table has given columns.\n *\n * @param string $table\n * @param array<string> $columns\n * @return bool\n * @static\n */\n public static function hasColumns($table, $columns)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasColumns($table, $columns);\n }\n\n /**\n * Execute a table builder callback if the given table has a given column.\n *\n * @param string $table\n * @param string $column\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function whenTableHasColumn($table, $column, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->whenTableHasColumn($table, $column, $callback);\n }\n\n /**\n * Execute a table builder callback if the given table doesn't have a given column.\n *\n * @param string $table\n * @param string $column\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function whenTableDoesntHaveColumn($table, $column, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->whenTableDoesntHaveColumn($table, $column, $callback);\n }\n\n /**\n * Get the data type for the given column name.\n *\n * @param string $table\n * @param string $column\n * @param bool $fullDefinition\n * @return string\n * @static\n */\n public static function getColumnType($table, $column, $fullDefinition = false)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumnType($table, $column, $fullDefinition);\n }\n\n /**\n * Get the column listing for a given table.\n *\n * @param string $table\n * @return list<string>\n * @static\n */\n public static function getColumnListing($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumnListing($table);\n }\n\n /**\n * Get the columns for a given table.\n *\n * @param string $table\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, type: string, type_name: string, nullable: bool, default: mixed, auto_increment: bool, comment: string|null, generation: array{type: string, expression: string|null}|null}>\n * @static\n */\n public static function getColumns($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumns($table);\n }\n\n /**\n * Get the indexes for a given table.\n *\n * @param string $table\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, columns: list<string>, type: string, unique: bool, primary: bool}>\n * @static\n */\n public static function getIndexes($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getIndexes($table);\n }\n\n /**\n * Get the names of the indexes for a given table.\n *\n * @param string $table\n * @return list<string>\n * @static\n */\n public static function getIndexListing($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getIndexListing($table);\n }\n\n /**\n * Determine if the given table has a given index.\n *\n * @param string $table\n * @param string|array $index\n * @param string|null $type\n * @return bool\n * @static\n */\n public static function hasIndex($table, $index, $type = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasIndex($table, $index, $type);\n }\n\n /**\n * Get the foreign keys for a given table.\n *\n * @param string $table\n * @return array\n * @static\n */\n public static function getForeignKeys($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getForeignKeys($table);\n }\n\n /**\n * Modify a table on the schema.\n *\n * @param string $table\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function table($table, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->table($table, $callback);\n }\n\n /**\n * Create a new table on the schema.\n *\n * @param string $table\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function create($table, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->create($table, $callback);\n }\n\n /**\n * Drop a table from the schema.\n *\n * @param string $table\n * @return void\n * @static\n */\n public static function drop($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->drop($table);\n }\n\n /**\n * Drop a table from the schema if it exists.\n *\n * @param string $table\n * @return void\n * @static\n */\n public static function dropIfExists($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropIfExists($table);\n }\n\n /**\n * Drop columns from a table schema.\n *\n * @param string $table\n * @param string|array<string> $columns\n * @return void\n * @static\n */\n public static function dropColumns($table, $columns)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropColumns($table, $columns);\n }\n\n /**\n * Drop all types from the database.\n *\n * @return void\n * @throws \\LogicException\n * @static\n */\n public static function dropAllTypes()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllTypes();\n }\n\n /**\n * Rename a table on the schema.\n *\n * @param string $from\n * @param string $to\n * @return void\n * @static\n */\n public static function rename($from, $to)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->rename($from, $to);\n }\n\n /**\n * Enable foreign key constraints.\n *\n * @return bool\n * @static\n */\n public static function enableForeignKeyConstraints()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->enableForeignKeyConstraints();\n }\n\n /**\n * Disable foreign key constraints.\n *\n * @return bool\n * @static\n */\n public static function disableForeignKeyConstraints()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->disableForeignKeyConstraints();\n }\n\n /**\n * Disable foreign key constraints during the execution of a callback.\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutForeignKeyConstraints($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->withoutForeignKeyConstraints($callback);\n }\n\n /**\n * Get the default schema name for the connection.\n *\n * @return string|null\n * @static\n */\n public static function getCurrentSchemaName()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getCurrentSchemaName();\n }\n\n /**\n * Parse the given database object reference and extract the schema and table.\n *\n * @param string $reference\n * @param string|bool|null $withDefaultSchema\n * @return array\n * @static\n */\n public static function parseSchemaAndTable($reference, $withDefaultSchema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->parseSchemaAndTable($reference, $withDefaultSchema);\n }\n\n /**\n * Get the database connection instance.\n *\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function getConnection()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getConnection();\n }\n\n /**\n * Set the Schema Blueprint resolver callback.\n *\n * @param \\Closure(\\Illuminate\\Database\\Connection, string, \\Closure|null): \\Illuminate\\Database\\Schema\\Blueprint $resolver\n * @return void\n * @static\n */\n public static function blueprintResolver($resolver)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->blueprintResolver($resolver);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n return \\Illuminate\\Database\\Schema\\MariaDbBuilder::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Session\\SessionManager\n */\n class Session {\n /**\n * Determine if requests for the same session should wait for each to finish before executing.\n *\n * @return bool\n * @static\n */\n public static function shouldBlock()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->shouldBlock();\n }\n\n /**\n * Get the name of the cache store / driver that should be used to acquire session locks.\n *\n * @return string|null\n * @static\n */\n public static function blockDriver()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->blockDriver();\n }\n\n /**\n * Get the maximum number of seconds the session lock should be held for.\n *\n * @return int\n * @static\n */\n public static function defaultRouteBlockLockSeconds()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->defaultRouteBlockLockSeconds();\n }\n\n /**\n * Get the maximum number of seconds to wait while attempting to acquire a route block session lock.\n *\n * @return int\n * @static\n */\n public static function defaultRouteBlockWaitSeconds()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->defaultRouteBlockWaitSeconds();\n }\n\n /**\n * Get the session configuration.\n *\n * @return array\n * @static\n */\n public static function getSessionConfig()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getSessionConfig();\n }\n\n /**\n * Get the default session driver name.\n *\n * @return string|null\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default session driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->forgetDrivers();\n }\n\n /**\n * Start the session, reading the data from a handler.\n *\n * @return bool\n * @static\n */\n public static function start()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->start();\n }\n\n /**\n * Save the session data to storage.\n *\n * @return void\n * @static\n */\n public static function save()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->save();\n }\n\n /**\n * Age the flash data for the session.\n *\n * @return void\n * @static\n */\n public static function ageFlashData()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->ageFlashData();\n }\n\n /**\n * Get all of the session data.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->all();\n }\n\n /**\n * Get a subset of the session data.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->only($keys);\n }\n\n /**\n * Get all the session data except for a specified array of items.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->except($keys);\n }\n\n /**\n * Checks if a key exists.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function exists($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->exists($key);\n }\n\n /**\n * Determine if the given key is missing from the session data.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->missing($key);\n }\n\n /**\n * Determine if a key is present and not null.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if any of the given keys are present and not null.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function hasAny($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasAny($key);\n }\n\n /**\n * Get an item from the session.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get the value of a given key and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Determine if the session contains old input.\n *\n * @param string|null $key\n * @return bool\n * @static\n */\n public static function hasOldInput($key = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasOldInput($key);\n }\n\n /**\n * Get the requested item from the flashed input array.\n *\n * @param string|null $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getOldInput($key = null, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getOldInput($key, $default);\n }\n\n /**\n * Replace the given session attributes entirely.\n *\n * @param array $attributes\n * @return void\n * @static\n */\n public static function replace($attributes)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->replace($attributes);\n }\n\n /**\n * Put a key / value pair or array of key / value pairs in the session.\n *\n * @param string|array $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function put($key, $value = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->put($key, $value);\n }\n\n /**\n * Get an item from the session, or store the default value.\n *\n * @param string $key\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function remember($key, $callback)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->remember($key, $callback);\n }\n\n /**\n * Push a value onto a session array.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function push($key, $value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->push($key, $value);\n }\n\n /**\n * Increment the value of an item in the session.\n *\n * @param string $key\n * @param int $amount\n * @return mixed\n * @static\n */\n public static function increment($key, $amount = 1)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->increment($key, $amount);\n }\n\n /**\n * Decrement the value of an item in the session.\n *\n * @param string $key\n * @param int $amount\n * @return int\n * @static\n */\n public static function decrement($key, $amount = 1)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->decrement($key, $amount);\n }\n\n /**\n * Flash a key / value pair to the session.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function flash($key, $value = true)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flash($key, $value);\n }\n\n /**\n * Flash a key / value pair to the session for immediate use.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function now($key, $value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->now($key, $value);\n }\n\n /**\n * Reflash all of the session flash data.\n *\n * @return void\n * @static\n */\n public static function reflash()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->reflash();\n }\n\n /**\n * Reflash a subset of the current flash data.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function keep($keys = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->keep($keys);\n }\n\n /**\n * Flash an input array to the session.\n *\n * @param array $value\n * @return void\n * @static\n */\n public static function flashInput($value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flashInput($value);\n }\n\n /**\n * Get the session cache instance.\n *\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function cache()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->cache();\n }\n\n /**\n * Remove an item from the session, returning its value.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function remove($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->remove($key);\n }\n\n /**\n * Remove one or many items from the session.\n *\n * @param string|array $keys\n * @return void\n * @static\n */\n public static function forget($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->forget($keys);\n }\n\n /**\n * Remove all of the items from the session.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flush();\n }\n\n /**\n * Flush the session data and regenerate the ID.\n *\n * @return bool\n * @static\n */\n public static function invalidate()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->invalidate();\n }\n\n /**\n * Generate a new session identifier.\n *\n * @param bool $destroy\n * @return bool\n * @static\n */\n public static function regenerate($destroy = false)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->regenerate($destroy);\n }\n\n /**\n * Generate a new session ID for the session.\n *\n * @param bool $destroy\n * @return bool\n * @static\n */\n public static function migrate($destroy = false)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->migrate($destroy);\n }\n\n /**\n * Determine if the session has been started.\n *\n * @return bool\n * @static\n */\n public static function isStarted()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->isStarted();\n }\n\n /**\n * Get the name of the session.\n *\n * @return string\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getName();\n }\n\n /**\n * Set the name of the session.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setName($name)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setName($name);\n }\n\n /**\n * Get the current session ID.\n *\n * @return string\n * @static\n */\n public static function id()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->id();\n }\n\n /**\n * Get the current session ID.\n *\n * @return string\n * @static\n */\n public static function getId()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getId();\n }\n\n /**\n * Set the session ID.\n *\n * @param string|null $id\n * @return void\n * @static\n */\n public static function setId($id)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setId($id);\n }\n\n /**\n * Determine if this is a valid session ID.\n *\n * @param string|null $id\n * @return bool\n * @static\n */\n public static function isValidId($id)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->isValidId($id);\n }\n\n /**\n * Set the existence of the session on the handler if applicable.\n *\n * @param bool $value\n * @return void\n * @static\n */\n public static function setExists($value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setExists($value);\n }\n\n /**\n * Get the CSRF token value.\n *\n * @return string\n * @static\n */\n public static function token()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->token();\n }\n\n /**\n * Regenerate the CSRF token value.\n *\n * @return void\n * @static\n */\n public static function regenerateToken()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->regenerateToken();\n }\n\n /**\n * Determine if the previous URI is available.\n *\n * @return bool\n * @static\n */\n public static function hasPreviousUri()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasPreviousUri();\n }\n\n /**\n * Get the previous URL from the session as a URI instance.\n *\n * @return \\Illuminate\\Support\\Uri\n * @throws \\RuntimeException\n * @static\n */\n public static function previousUri()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->previousUri();\n }\n\n /**\n * Get the previous URL from the session.\n *\n * @return string|null\n * @static\n */\n public static function previousUrl()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->previousUrl();\n }\n\n /**\n * Set the \"previous\" URL in the session.\n *\n * @param string $url\n * @return void\n * @static\n */\n public static function setPreviousUrl($url)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setPreviousUrl($url);\n }\n\n /**\n * Specify that the user has confirmed their password.\n *\n * @return void\n * @static\n */\n public static function passwordConfirmed()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->passwordConfirmed();\n }\n\n /**\n * Get the underlying session handler implementation.\n *\n * @return \\SessionHandlerInterface\n * @static\n */\n public static function getHandler()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getHandler();\n }\n\n /**\n * Set the underlying session handler implementation.\n *\n * @param \\SessionHandlerInterface $handler\n * @return \\SessionHandlerInterface\n * @static\n */\n public static function setHandler($handler)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->setHandler($handler);\n }\n\n /**\n * Determine if the session handler needs a request.\n *\n * @return bool\n * @static\n */\n public static function handlerNeedsRequest()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->handlerNeedsRequest();\n }\n\n /**\n * Set the request on the handler instance.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function setRequestOnHandler($request)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setRequestOnHandler($request);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Session\\Store::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Session\\Store::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Session\\Store::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Session\\Store::flushMacros();\n }\n\n }\n /**\n * @method static bool has(string $location)\n * @method static string read(string $location)\n * @method static \\League\\Flysystem\\DirectoryListing listContents(string $location, bool $deep = false)\n * @method static int fileSize(string $path)\n * @method static string visibility(string $path)\n * @method static void write(string $location, string $contents, array $config = [])\n * @method static void createDirectory(string $location, array $config = [])\n * @see \\Illuminate\\Filesystem\\FilesystemManager\n */\n class Storage {\n /**\n * Get a filesystem instance.\n *\n * @param string|null $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function drive($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->drive($name);\n }\n\n /**\n * Get a filesystem instance.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function disk($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->disk($name);\n }\n\n /**\n * Get a default cloud filesystem instance.\n *\n * @return \\Illuminate\\Contracts\\Filesystem\\Cloud\n * @static\n */\n public static function cloud()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->cloud();\n }\n\n /**\n * Build an on-demand disk.\n *\n * @param string|array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create an instance of the local driver.\n *\n * @param array $config\n * @param string $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createLocalDriver($config, $name = 'local')\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createLocalDriver($config, $name);\n }\n\n /**\n * Create an instance of the ftp driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createFtpDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createFtpDriver($config);\n }\n\n /**\n * Create an instance of the sftp driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createSftpDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createSftpDriver($config);\n }\n\n /**\n * Create an instance of the Amazon S3 driver.\n *\n * @param array $config\n * @return \\Illuminate\\Contracts\\Filesystem\\Cloud\n * @static\n */\n public static function createS3Driver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createS3Driver($config);\n }\n\n /**\n * Create a scoped driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createScopedDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createScopedDriver($config);\n }\n\n /**\n * Set the given disk instance.\n *\n * @param string $name\n * @param mixed $disk\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function set($name, $disk)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->set($name, $disk);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Get the default cloud driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultCloudDriver()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->getDefaultCloudDriver();\n }\n\n /**\n * Unset the given disk instances.\n *\n * @param array|string $disk\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function forgetDisk($disk)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->forgetDisk($disk);\n }\n\n /**\n * Disconnect the given disk and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Determine if temporary URLs can be generated.\n *\n * @return bool\n * @static\n */\n public static function providesTemporaryUrls()\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->providesTemporaryUrls();\n }\n\n /**\n * Get a temporary URL for the file at the given path.\n *\n * @param string $path\n * @param \\DateTimeInterface $expiration\n * @param array $options\n * @return string\n * @static\n */\n public static function temporaryUrl($path, $expiration, $options = [])\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->temporaryUrl($path, $expiration, $options);\n }\n\n /**\n * Specify the name of the disk the adapter is managing.\n *\n * @param string $disk\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function diskName($disk)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->diskName($disk);\n }\n\n /**\n * Indicate that signed URLs should serve the corresponding files.\n *\n * @param bool $serve\n * @param \\Closure|null $urlGeneratorResolver\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function shouldServeSignedUrls($serve = true, $urlGeneratorResolver = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->shouldServeSignedUrls($serve, $urlGeneratorResolver);\n }\n\n /**\n * Assert that the given file or directory exists.\n *\n * @param string|array $path\n * @param string|null $content\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertExists($path, $content = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertExists($path, $content);\n }\n\n /**\n * Assert that the number of files in path equals the expected count.\n *\n * @param string $path\n * @param int $count\n * @param bool $recursive\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertCount($path, $count, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertCount($path, $count, $recursive);\n }\n\n /**\n * Assert that the given file or directory does not exist.\n *\n * @param string|array $path\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertMissing($path);\n }\n\n /**\n * Assert that the given directory is empty.\n *\n * @param string $path\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertDirectoryEmpty($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertDirectoryEmpty($path);\n }\n\n /**\n * Determine if a file or directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function exists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->exists($path);\n }\n\n /**\n * Determine if a file or directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function missing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->missing($path);\n }\n\n /**\n * Determine if a file exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function fileExists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->fileExists($path);\n }\n\n /**\n * Determine if a file is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function fileMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->fileMissing($path);\n }\n\n /**\n * Determine if a directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function directoryExists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directoryExists($path);\n }\n\n /**\n * Determine if a directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function directoryMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directoryMissing($path);\n }\n\n /**\n * Get the full path to the file that exists at the given relative path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function path($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->path($path);\n }\n\n /**\n * Get the contents of a file.\n *\n * @param string $path\n * @return string|null\n * @static\n */\n public static function get($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->get($path);\n }\n\n /**\n * Get the contents of a file as decoded JSON.\n *\n * @param string $path\n * @param int $flags\n * @return array|null\n * @static\n */\n public static function json($path, $flags = 0)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->json($path, $flags);\n }\n\n /**\n * Create a streamed response for a given file.\n *\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function response($path, $name = null, $headers = [], $disposition = 'inline')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->response($path, $name, $headers, $disposition);\n }\n\n /**\n * Create a streamed download response for a given file.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function serve($request, $path, $name = null, $headers = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->serve($request, $path, $name, $headers);\n }\n\n /**\n * Create a streamed download response for a given file.\n *\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function download($path, $name = null, $headers = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->download($path, $name, $headers);\n }\n\n /**\n * Write the contents of a file.\n *\n * @param string $path\n * @param \\Psr\\Http\\Message\\StreamInterface|\\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|resource $contents\n * @param mixed $options\n * @return string|bool\n * @static\n */\n public static function put($path, $contents, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->put($path, $contents, $options);\n }\n\n /**\n * Store the uploaded file on the disk.\n *\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string $path\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|array|null $file\n * @param mixed $options\n * @return string|false\n * @static\n */\n public static function putFile($path, $file = null, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->putFile($path, $file, $options);\n }\n\n /**\n * Store the uploaded file on the disk with a given name.\n *\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string $path\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|array|null $file\n * @param string|array|null $name\n * @param mixed $options\n * @return string|false\n * @static\n */\n public static function putFileAs($path, $file, $name = null, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->putFileAs($path, $file, $name, $options);\n }\n\n /**\n * Get the visibility for the given path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function getVisibility($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getVisibility($path);\n }\n\n /**\n * Set the visibility for the given path.\n *\n * @param string $path\n * @param string $visibility\n * @return bool\n * @static\n */\n public static function setVisibility($path, $visibility)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->setVisibility($path, $visibility);\n }\n\n /**\n * Prepend to a file.\n *\n * @param string $path\n * @param string $data\n * @param string $separator\n * @return bool\n * @static\n */\n public static function prepend($path, $data, $separator = '\n')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->prepend($path, $data, $separator);\n }\n\n /**\n * Append to a file.\n *\n * @param string $path\n * @param string $data\n * @param string $separator\n * @return bool\n * @static\n */\n public static function append($path, $data, $separator = '\n')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->append($path, $data, $separator);\n }\n\n /**\n * Delete the file at a given path.\n *\n * @param string|array $paths\n * @return bool\n * @static\n */\n public static function delete($paths)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->delete($paths);\n }\n\n /**\n * Copy a file to a new location.\n *\n * @param string $from\n * @param string $to\n * @return bool\n * @static\n */\n public static function copy($from, $to)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->copy($from, $to);\n }\n\n /**\n * Move a file to a new location.\n *\n * @param string $from\n * @param string $to\n * @return bool\n * @static\n */\n public static function move($from, $to)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->move($from, $to);\n }\n\n /**\n * Get the file size of a given file.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function size($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->size($path);\n }\n\n /**\n * Get the checksum for a file.\n *\n * @return string|false\n * @throws UnableToProvideChecksum\n * @static\n */\n public static function checksum($path, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->checksum($path, $options);\n }\n\n /**\n * Get the mime-type of a given file.\n *\n * @param string $path\n * @return string|false\n * @static\n */\n public static function mimeType($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->mimeType($path);\n }\n\n /**\n * Get the file's last modification time.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function lastModified($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->lastModified($path);\n }\n\n /**\n * Get a resource to read the file.\n *\n * @param string $path\n * @return resource|null The path resource or null on failure.\n * @static\n */\n public static function readStream($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->readStream($path);\n }\n\n /**\n * Write a new file using a stream.\n *\n * @param string $path\n * @param resource $resource\n * @param array $options\n * @return bool\n * @static\n */\n public static function writeStream($path, $resource, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->writeStream($path, $resource, $options);\n }\n\n /**\n * Get the URL for the file at the given path.\n *\n * @param string $path\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function url($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->url($path);\n }\n\n /**\n * Get a temporary upload URL for the file at the given path.\n *\n * @param string $path\n * @param \\DateTimeInterface $expiration\n * @param array $options\n * @return array\n * @throws \\RuntimeException\n * @static\n */\n public static function temporaryUploadUrl($path, $expiration, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->temporaryUploadUrl($path, $expiration, $options);\n }\n\n /**\n * Get an array of all files in a directory.\n *\n * @param string|null $directory\n * @param bool $recursive\n * @return array\n * @static\n */\n public static function files($directory = null, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->files($directory, $recursive);\n }\n\n /**\n * Get all of the files from the given directory (recursive).\n *\n * @param string|null $directory\n * @return array\n * @static\n */\n public static function allFiles($directory = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->allFiles($directory);\n }\n\n /**\n * Get all of the directories within a given directory.\n *\n * @param string|null $directory\n * @param bool $recursive\n * @return array\n * @static\n */\n public static function directories($directory = null, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directories($directory, $recursive);\n }\n\n /**\n * Get all the directories within a given directory (recursive).\n *\n * @param string|null $directory\n * @return array\n * @static\n */\n public static function allDirectories($directory = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->allDirectories($directory);\n }\n\n /**\n * Create a directory.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function makeDirectory($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->makeDirectory($path);\n }\n\n /**\n * Recursively delete a directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function deleteDirectory($directory)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->deleteDirectory($directory);\n }\n\n /**\n * Get the Flysystem driver.\n *\n * @return \\League\\Flysystem\\FilesystemOperator\n * @static\n */\n public static function getDriver()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getDriver();\n }\n\n /**\n * Get the Flysystem adapter.\n *\n * @return \\League\\Flysystem\\FilesystemAdapter\n * @static\n */\n public static function getAdapter()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getAdapter();\n }\n\n /**\n * Get the configuration values.\n *\n * @return array\n * @static\n */\n public static function getConfig()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getConfig();\n }\n\n /**\n * Define a custom callback that generates file download responses.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function serveUsing($callback)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n $instance->serveUsing($callback);\n }\n\n /**\n * Define a custom temporary URL builder callback.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function buildTemporaryUrlsUsing($callback)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n $instance->buildTemporaryUrlsUsing($callback);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n return \\Illuminate\\Filesystem\\LocalFilesystemAdapter::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\UrlGenerator\n */\n class URL {\n /**\n * Get the full URL for the current request.\n *\n * @return string\n * @static\n */\n public static function full()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->full();\n }\n\n /**\n * Get the current URL for the request.\n *\n * @return string\n * @static\n */\n public static function current()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->current();\n }\n\n /**\n * Get the URL for the previous request.\n *\n * @param mixed $fallback\n * @return string\n * @static\n */\n public static function previous($fallback = false)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->previous($fallback);\n }\n\n /**\n * Get the previous path info for the request.\n *\n * @param mixed $fallback\n * @return string\n * @static\n */\n public static function previousPath($fallback = false)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->previousPath($fallback);\n }\n\n /**\n * Generate an absolute URL to the given path.\n *\n * @param string $path\n * @param mixed $extra\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function to($path, $extra = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->to($path, $extra, $secure);\n }\n\n /**\n * Generate an absolute URL with the given query parameters.\n *\n * @param string $path\n * @param array $query\n * @param mixed $extra\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function query($path, $query = [], $extra = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->query($path, $query, $extra, $secure);\n }\n\n /**\n * Generate a secure, absolute URL to the given path.\n *\n * @param string $path\n * @param array $parameters\n * @return string\n * @static\n */\n public static function secure($path, $parameters = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->secure($path, $parameters);\n }\n\n /**\n * Generate the URL to an application asset.\n *\n * @param string $path\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function asset($path, $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->asset($path, $secure);\n }\n\n /**\n * Generate the URL to a secure asset.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function secureAsset($path)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->secureAsset($path);\n }\n\n /**\n * Generate the URL to an asset from a custom root domain such as CDN, etc.\n *\n * @param string $root\n * @param string $path\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function assetFrom($root, $path, $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->assetFrom($root, $path, $secure);\n }\n\n /**\n * Get the default scheme for a raw URL.\n *\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function formatScheme($secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatScheme($secure);\n }\n\n /**\n * Create a signed route URL for a named route.\n *\n * @param \\BackedEnum|string $name\n * @param mixed $parameters\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param bool $absolute\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function signedRoute($name, $parameters = [], $expiration = null, $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->signedRoute($name, $parameters, $expiration, $absolute);\n }\n\n /**\n * Create a temporary signed route URL for a named route.\n *\n * @param \\BackedEnum|string $name\n * @param \\DateTimeInterface|\\DateInterval|int $expiration\n * @param array $parameters\n * @param bool $absolute\n * @return string\n * @static\n */\n public static function temporarySignedRoute($name, $expiration, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->temporarySignedRoute($name, $expiration, $parameters, $absolute);\n }\n\n /**\n * Determine if the given request has a valid signature.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param bool $absolute\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasValidSignature($request, $absolute = true, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasValidSignature($request, $absolute, $ignoreQuery);\n }\n\n /**\n * Determine if the given request has a valid signature for a relative URL.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasValidRelativeSignature($request, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasValidRelativeSignature($request, $ignoreQuery);\n }\n\n /**\n * Determine if the signature from the given request matches the URL.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param bool $absolute\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasCorrectSignature($request, $absolute = true, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasCorrectSignature($request, $absolute, $ignoreQuery);\n }\n\n /**\n * Determine if the expires timestamp from the given request is not from the past.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return bool\n * @static\n */\n public static function signatureHasNotExpired($request)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->signatureHasNotExpired($request);\n }\n\n /**\n * Get the URL to a named route.\n *\n * @param \\BackedEnum|string $name\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\Symfony\\Component\\Routing\\Exception\\RouteNotFoundException|\\InvalidArgumentException\n * @static\n */\n public static function route($name, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->route($name, $parameters, $absolute);\n }\n\n /**\n * Get the URL for a given route instance.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\Illuminate\\Routing\\Exceptions\\UrlGenerationException\n * @static\n */\n public static function toRoute($route, $parameters, $absolute)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->toRoute($route, $parameters, $absolute);\n }\n\n /**\n * Get the URL to a controller action.\n *\n * @param string|array $action\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function action($action, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->action($action, $parameters, $absolute);\n }\n\n /**\n * Format the array of URL parameters.\n *\n * @param mixed $parameters\n * @return array\n * @static\n */\n public static function formatParameters($parameters)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatParameters($parameters);\n }\n\n /**\n * Get the base URL for the request.\n *\n * @param string $scheme\n * @param string|null $root\n * @return string\n * @static\n */\n public static function formatRoot($scheme, $root = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatRoot($scheme, $root);\n }\n\n /**\n * Format the given URL segments into a single URL.\n *\n * @param string $root\n * @param string $path\n * @param \\Illuminate\\Routing\\Route|null $route\n * @return string\n * @static\n */\n public static function format($root, $path, $route = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->format($root, $path, $route);\n }\n\n /**\n * Determine if the given path is a valid URL.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isValidUrl($path)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->isValidUrl($path);\n }\n\n /**\n * Set the default named parameters used by the URL generator.\n *\n * @param array $defaults\n * @return void\n * @static\n */\n public static function defaults($defaults)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->defaults($defaults);\n }\n\n /**\n * Get the default named parameters used by the URL generator.\n *\n * @return array\n * @static\n */\n public static function getDefaultParameters()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getDefaultParameters();\n }\n\n /**\n * Force the scheme for URLs.\n *\n * @param string|null $scheme\n * @return void\n * @static\n */\n public static function forceScheme($scheme)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceScheme($scheme);\n }\n\n /**\n * Force the use of the HTTPS scheme for all generated URLs.\n *\n * @param bool $force\n * @return void\n * @static\n */\n public static function forceHttps($force = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceHttps($force);\n }\n\n /**\n * Set the URL origin for all generated URLs.\n *\n * @param string|null $root\n * @return void\n * @static\n */\n public static function useOrigin($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->useOrigin($root);\n }\n\n /**\n * Set the forced root URL.\n *\n * @param string|null $root\n * @return void\n * @deprecated Use useOrigin\n * @static\n */\n public static function forceRootUrl($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceRootUrl($root);\n }\n\n /**\n * Set the URL origin for all generated asset URLs.\n *\n * @param string|null $root\n * @return void\n * @static\n */\n public static function useAssetOrigin($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->useAssetOrigin($root);\n }\n\n /**\n * Set a callback to be used to format the host of generated URLs.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function formatHostUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatHostUsing($callback);\n }\n\n /**\n * Set a callback to be used to format the path of generated URLs.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function formatPathUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatPathUsing($callback);\n }\n\n /**\n * Get the path formatter being used by the URL generator.\n *\n * @return \\Closure\n * @static\n */\n public static function pathFormatter()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->pathFormatter();\n }\n\n /**\n * Get the request instance.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function getRequest()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getRequest();\n }\n\n /**\n * Set the current request instance.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function setRequest($request)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->setRequest($request);\n }\n\n /**\n * Set the route collection.\n *\n * @param \\Illuminate\\Routing\\RouteCollectionInterface $routes\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setRoutes($routes);\n }\n\n /**\n * Set the session resolver for the generator.\n *\n * @param callable $sessionResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setSessionResolver($sessionResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setSessionResolver($sessionResolver);\n }\n\n /**\n * Set the encryption key resolver.\n *\n * @param callable $keyResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setKeyResolver($keyResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setKeyResolver($keyResolver);\n }\n\n /**\n * Clone a new instance of the URL generator with a different encryption key resolver.\n *\n * @param callable $keyResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function withKeyResolver($keyResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->withKeyResolver($keyResolver);\n }\n\n /**\n * Set the callback that should be used to attempt to resolve missing named routes.\n *\n * @param callable $missingNamedRouteResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function resolveMissingNamedRoutesUsing($missingNamedRouteResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->resolveMissingNamedRoutesUsing($missingNamedRouteResolver);\n }\n\n /**\n * Get the root controller namespace.\n *\n * @return string\n * @static\n */\n public static function getRootControllerNamespace()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getRootControllerNamespace();\n }\n\n /**\n * Set the root controller namespace.\n *\n * @param string $rootNamespace\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setRootControllerNamespace($rootNamespace)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setRootControllerNamespace($rootNamespace);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\UrlGenerator::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\UrlGenerator::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\UrlGenerator::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\UrlGenerator::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Validation\\Factory\n */\n class Validator {\n /**\n * Create a new Validator instance.\n *\n * @param array $data\n * @param array $rules\n * @param array $messages\n * @param array $attributes\n * @return \\Illuminate\\Validation\\Validator\n * @static\n */\n public static function make($data, $rules, $messages = [], $attributes = [])\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->make($data, $rules, $messages, $attributes);\n }\n\n /**\n * Validate the given data against the provided rules.\n *\n * @param array $data\n * @param array $rules\n * @param array $messages\n * @param array $attributes\n * @return array\n * @throws \\Illuminate\\Validation\\ValidationException\n * @static\n */\n public static function validate($data, $rules, $messages = [], $attributes = [])\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->validate($data, $rules, $messages, $attributes);\n }\n\n /**\n * Register a custom validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extend($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extend($rule, $extension, $message);\n }\n\n /**\n * Register a custom implicit validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extendImplicit($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extendImplicit($rule, $extension, $message);\n }\n\n /**\n * Register a custom dependent validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extendDependent($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extendDependent($rule, $extension, $message);\n }\n\n /**\n * Register a custom validator message replacer.\n *\n * @param string $rule\n * @param \\Closure|string $replacer\n * @return void\n * @static\n */\n public static function replacer($rule, $replacer)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->replacer($rule, $replacer);\n }\n\n /**\n * Indicate that unvalidated array keys should be included in validated data when the parent array is validated.\n *\n * @return void\n * @static\n */\n public static function includeUnvalidatedArrayKeys()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->includeUnvalidatedArrayKeys();\n }\n\n /**\n * Indicate that unvalidated array keys should be excluded from the validated data, even if the parent array was validated.\n *\n * @return void\n * @static\n */\n public static function excludeUnvalidatedArrayKeys()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->excludeUnvalidatedArrayKeys();\n }\n\n /**\n * Set the Validator instance resolver.\n *\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function resolver($resolver)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->resolver($resolver);\n }\n\n /**\n * Get the Translator implementation.\n *\n * @return \\Illuminate\\Contracts\\Translation\\Translator\n * @static\n */\n public static function getTranslator()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getTranslator();\n }\n\n /**\n * Get the Presence Verifier implementation.\n *\n * @return \\Illuminate\\Validation\\PresenceVerifierInterface\n * @static\n */\n public static function getPresenceVerifier()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getPresenceVerifier();\n }\n\n /**\n * Set the Presence Verifier implementation.\n *\n * @param \\Illuminate\\Validation\\PresenceVerifierInterface $presenceVerifier\n * @return void\n * @static\n */\n public static function setPresenceVerifier($presenceVerifier)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->setPresenceVerifier($presenceVerifier);\n }\n\n /**\n * Get the container instance used by the validation factory.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container|null\n * @static\n */\n public static function getContainer()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the validation factory.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Validation\\Factory\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->setContainer($container);\n }\n\n }\n /**\n * @see \\Illuminate\\View\\Factory\n */\n class View {\n /**\n * Get the evaluated view contents for the given view.\n *\n * @param string $path\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @static\n */\n public static function file($path, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->file($path, $data, $mergeData);\n }\n\n /**\n * Get the evaluated view contents for the given view.\n *\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @static\n */\n public static function make($view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->make($view, $data, $mergeData);\n }\n\n /**\n * Get the first view that actually exists from the given list.\n *\n * @param array $views\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function first($views, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->first($views, $data, $mergeData);\n }\n\n /**\n * Get the rendered content of the view based on a given condition.\n *\n * @param bool $condition\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return string\n * @static\n */\n public static function renderWhen($condition, $view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderWhen($condition, $view, $data, $mergeData);\n }\n\n /**\n * Get the rendered content of the view based on the negation of a given condition.\n *\n * @param bool $condition\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return string\n * @static\n */\n public static function renderUnless($condition, $view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderUnless($condition, $view, $data, $mergeData);\n }\n\n /**\n * Get the rendered contents of a partial from a loop.\n *\n * @param string $view\n * @param array $data\n * @param string $iterator\n * @param string $empty\n * @return string\n * @static\n */\n public static function renderEach($view, $data, $iterator, $empty = 'raw|')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderEach($view, $data, $iterator, $empty);\n }\n\n /**\n * Determine if a given view exists.\n *\n * @param string $view\n * @return bool\n * @static\n */\n public static function exists($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->exists($view);\n }\n\n /**\n * Get the appropriate view engine for the given path.\n *\n * @param string $path\n * @return \\Illuminate\\Contracts\\View\\Engine\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function getEngineFromPath($path)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getEngineFromPath($path);\n }\n\n /**\n * Add a piece of shared data to the environment.\n *\n * @param array|string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function share($key, $value = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->share($key, $value);\n }\n\n /**\n * Increment the rendering counter.\n *\n * @return void\n * @static\n */\n public static function incrementRender()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->incrementRender();\n }\n\n /**\n * Decrement the rendering counter.\n *\n * @return void\n * @static\n */\n public static function decrementRender()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->decrementRender();\n }\n\n /**\n * Check if there are no active render operations.\n *\n * @return bool\n * @static\n */\n public static function doneRendering()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->doneRendering();\n }\n\n /**\n * Determine if the given once token has been rendered.\n *\n * @param string $id\n * @return bool\n * @static\n */\n public static function hasRenderedOnce($id)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->hasRenderedOnce($id);\n }\n\n /**\n * Mark the given once token as having been rendered.\n *\n * @param string $id\n * @return void\n * @static\n */\n public static function markAsRenderedOnce($id)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->markAsRenderedOnce($id);\n }\n\n /**\n * Add a location to the array of view locations.\n *\n * @param string $location\n * @return void\n * @static\n */\n public static function addLocation($location)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addLocation($location);\n }\n\n /**\n * Prepend a location to the array of view locations.\n *\n * @param string $location\n * @return void\n * @static\n */\n public static function prependLocation($location)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->prependLocation($location);\n }\n\n /**\n * Add a new namespace to the loader.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function addNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->addNamespace($namespace, $hints);\n }\n\n /**\n * Prepend a new namespace to the loader.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function prependNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->prependNamespace($namespace, $hints);\n }\n\n /**\n * Replace the namespace hints for the given namespace.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function replaceNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->replaceNamespace($namespace, $hints);\n }\n\n /**\n * Register a valid view extension and its engine.\n *\n * @param string $extension\n * @param string $engine\n * @param \\Closure|null $resolver\n * @return void\n * @static\n */\n public static function addExtension($extension, $engine, $resolver = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addExtension($extension, $engine, $resolver);\n }\n\n /**\n * Flush all of the factory state like sections and stacks.\n *\n * @return void\n * @static\n */\n public static function flushState()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushState();\n }\n\n /**\n * Flush all of the section contents if done rendering.\n *\n * @return void\n * @static\n */\n public static function flushStateIfDoneRendering()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushStateIfDoneRendering();\n }\n\n /**\n * Get the extension to engine bindings.\n *\n * @return array\n * @static\n */\n public static function getExtensions()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getExtensions();\n }\n\n /**\n * Get the engine resolver instance.\n *\n * @return \\Illuminate\\View\\Engines\\EngineResolver\n * @static\n */\n public static function getEngineResolver()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getEngineResolver();\n }\n\n /**\n * Get the view finder instance.\n *\n * @return \\Illuminate\\View\\ViewFinderInterface\n * @static\n */\n public static function getFinder()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFinder();\n }\n\n /**\n * Set the view finder instance.\n *\n * @param \\Illuminate\\View\\ViewFinderInterface $finder\n * @return void\n * @static\n */\n public static function setFinder($finder)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setFinder($finder);\n }\n\n /**\n * Flush the cache of views located by the finder.\n *\n * @return void\n * @static\n */\n public static function flushFinderCache()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushFinderCache();\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setDispatcher($events)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setDispatcher($events);\n }\n\n /**\n * Get the IoC container instance.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the IoC container instance.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return void\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setContainer($container);\n }\n\n /**\n * Get an item from the shared data.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function shared($key, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->shared($key, $default);\n }\n\n /**\n * Get all of the shared data for the environment.\n *\n * @return array\n * @static\n */\n public static function getShared()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getShared();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\View\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\View\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\View\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\View\\Factory::flushMacros();\n }\n\n /**\n * Start a component rendering process.\n *\n * @param \\Illuminate\\Contracts\\View\\View|\\Illuminate\\Contracts\\Support\\Htmlable|\\Closure|string $view\n * @param array $data\n * @return void\n * @static\n */\n public static function startComponent($view, $data = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startComponent($view, $data);\n }\n\n /**\n * Get the first view that actually exists from the given list, and start a component.\n *\n * @param array $names\n * @param array $data\n * @return void\n * @static\n */\n public static function startComponentFirst($names, $data = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startComponentFirst($names, $data);\n }\n\n /**\n * Render the current component.\n *\n * @return string\n * @static\n */\n public static function renderComponent()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderComponent();\n }\n\n /**\n * Get an item from the component data that exists above the current component.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getConsumableComponentData($key, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getConsumableComponentData($key, $default);\n }\n\n /**\n * Start the slot rendering process.\n *\n * @param string $name\n * @param string|null $content\n * @param array $attributes\n * @return void\n * @static\n */\n public static function slot($name, $content = null, $attributes = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->slot($name, $content, $attributes);\n }\n\n /**\n * Save the slot content for rendering.\n *\n * @return void\n * @static\n */\n public static function endSlot()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->endSlot();\n }\n\n /**\n * Register a view creator event.\n *\n * @param array|string $views\n * @param \\Closure|string $callback\n * @return array\n * @static\n */\n public static function creator($views, $callback)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->creator($views, $callback);\n }\n\n /**\n * Register multiple view composers via an array.\n *\n * @param array $composers\n * @return array\n * @static\n */\n public static function composers($composers)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->composers($composers);\n }\n\n /**\n * Register a view composer event.\n *\n * @param array|string $views\n * @param \\Closure|string $callback\n * @return array\n * @static\n */\n public static function composer($views, $callback)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->composer($views, $callback);\n }\n\n /**\n * Call the composer for a given view.\n *\n * @param \\Illuminate\\Contracts\\View\\View $view\n * @return void\n * @static\n */\n public static function callComposer($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->callComposer($view);\n }\n\n /**\n * Call the creator for a given view.\n *\n * @param \\Illuminate\\Contracts\\View\\View $view\n * @return void\n * @static\n */\n public static function callCreator($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->callCreator($view);\n }\n\n /**\n * Start injecting content into a fragment.\n *\n * @param string $fragment\n * @return void\n * @static\n */\n public static function startFragment($fragment)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startFragment($fragment);\n }\n\n /**\n * Stop injecting content into a fragment.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopFragment()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopFragment();\n }\n\n /**\n * Get the contents of a fragment.\n *\n * @param string $name\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function getFragment($name, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFragment($name, $default);\n }\n\n /**\n * Get the entire array of rendered fragments.\n *\n * @return array\n * @static\n */\n public static function getFragments()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFragments();\n }\n\n /**\n * Flush all of the fragments.\n *\n * @return void\n * @static\n */\n public static function flushFragments()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushFragments();\n }\n\n /**\n * Start injecting content into a section.\n *\n * @param string $section\n * @param string|null $content\n * @return void\n * @static\n */\n public static function startSection($section, $content = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startSection($section, $content);\n }\n\n /**\n * Inject inline content into a section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function inject($section, $content)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->inject($section, $content);\n }\n\n /**\n * Stop injecting content into a section and return its contents.\n *\n * @return string\n * @static\n */\n public static function yieldSection()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldSection();\n }\n\n /**\n * Stop injecting content into a section.\n *\n * @param bool $overwrite\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopSection($overwrite = false)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopSection($overwrite);\n }\n\n /**\n * Stop injecting content into a section and append it.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function appendSection()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->appendSection();\n }\n\n /**\n * Get the string contents of a section.\n *\n * @param string $section\n * @param string $default\n * @return string\n * @static\n */\n public static function yieldContent($section, $default = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldContent($section, $default);\n }\n\n /**\n * Get the parent placeholder for the current request.\n *\n * @param string $section\n * @return string\n * @static\n */\n public static function parentPlaceholder($section = '')\n {\n return \\Illuminate\\View\\Factory::parentPlaceholder($section);\n }\n\n /**\n * Check if section exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasSection($name)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->hasSection($name);\n }\n\n /**\n * Check if section does not exist.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function sectionMissing($name)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->sectionMissing($name);\n }\n\n /**\n * Get the contents of a section.\n *\n * @param string $name\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function getSection($name, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getSection($name, $default);\n }\n\n /**\n * Get the entire array of sections.\n *\n * @return array\n * @static\n */\n public static function getSections()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getSections();\n }\n\n /**\n * Flush all of the sections.\n *\n * @return void\n * @static\n */\n public static function flushSections()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushSections();\n }\n\n /**\n * Add new loop to the stack.\n *\n * @param \\Countable|array $data\n * @return void\n * @static\n */\n public static function addLoop($data)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addLoop($data);\n }\n\n /**\n * Increment the top loop's indices.\n *\n * @return void\n * @static\n */\n public static function incrementLoopIndices()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->incrementLoopIndices();\n }\n\n /**\n * Pop a loop from the top of the loop stack.\n *\n * @return void\n * @static\n */\n public static function popLoop()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->popLoop();\n }\n\n /**\n * Get an instance of the last loop in the stack.\n *\n * @return \\stdClass|null\n * @static\n */\n public static function getLastLoop()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getLastLoop();\n }\n\n /**\n * Get the entire loop stack.\n *\n * @return array\n * @static\n */\n public static function getLoopStack()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getLoopStack();\n }\n\n /**\n * Start injecting content into a push section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function startPush($section, $content = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startPush($section, $content);\n }\n\n /**\n * Stop injecting content into a push section.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopPush()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopPush();\n }\n\n /**\n * Start prepending content into a push section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function startPrepend($section, $content = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startPrepend($section, $content);\n }\n\n /**\n * Stop prepending content into a push section.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopPrepend()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopPrepend();\n }\n\n /**\n * Get the string contents of a push section.\n *\n * @param string $section\n * @param string $default\n * @return string\n * @static\n */\n public static function yieldPushContent($section, $default = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldPushContent($section, $default);\n }\n\n /**\n * Flush all of the stacks.\n *\n * @return void\n * @static\n */\n public static function flushStacks()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushStacks();\n }\n\n /**\n * Start a translation block.\n *\n * @param array $replacements\n * @return void\n * @static\n */\n public static function startTranslation($replacements = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startTranslation($replacements);\n }\n\n /**\n * Render the current translation.\n *\n * @return string\n * @static\n */\n public static function renderTranslation()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderTranslation();\n }\n\n }\n /**\n * @see \\Illuminate\\Foundation\\Vite\n */\n class Vite {\n /**\n * Get the preloaded assets.\n *\n * @return array\n * @static\n */\n public static function preloadedAssets()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->preloadedAssets();\n }\n\n /**\n * Get the Content Security Policy nonce applied to all generated tags.\n *\n * @return string|null\n * @static\n */\n public static function cspNonce()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->cspNonce();\n }\n\n /**\n * Generate or set a Content Security Policy nonce to apply to all generated tags.\n *\n * @param string|null $nonce\n * @return string\n * @static\n */\n public static function useCspNonce($nonce = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useCspNonce($nonce);\n }\n\n /**\n * Use the given key to detect integrity hashes in the manifest.\n *\n * @param string|false $key\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useIntegrityKey($key)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useIntegrityKey($key);\n }\n\n /**\n * Set the Vite entry points.\n *\n * @param array $entryPoints\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function withEntryPoints($entryPoints)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->withEntryPoints($entryPoints);\n }\n\n /**\n * Merge additional Vite entry points with the current set.\n *\n * @param array $entryPoints\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function mergeEntryPoints($entryPoints)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->mergeEntryPoints($entryPoints);\n }\n\n /**\n * Set the filename for the manifest file.\n *\n * @param string $filename\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useManifestFilename($filename)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useManifestFilename($filename);\n }\n\n /**\n * Resolve asset paths using the provided resolver.\n *\n * @param callable|null $resolver\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function createAssetPathsUsing($resolver)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->createAssetPathsUsing($resolver);\n }\n\n /**\n * Get the Vite \"hot\" file path.\n *\n * @return string\n * @static\n */\n public static function hotFile()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->hotFile();\n }\n\n /**\n * Set the Vite \"hot\" file path.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useHotFile($path)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useHotFile($path);\n }\n\n /**\n * Set the Vite build directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useBuildDirectory($path)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useBuildDirectory($path);\n }\n\n /**\n * Use the given callback to resolve attributes for script tags.\n *\n * @param (callable(string, string, ?array, ?array): array)|array $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useScriptTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useScriptTagAttributes($attributes);\n }\n\n /**\n * Use the given callback to resolve attributes for style tags.\n *\n * @param (callable(string, string, ?array, ?array): array)|array $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useStyleTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useStyleTagAttributes($attributes);\n }\n\n /**\n * Use the given callback to resolve attributes for preload tags.\n *\n * @param (callable(string, string, ?array, ?array): (array|false))|array|false $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function usePreloadTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->usePreloadTagAttributes($attributes);\n }\n\n /**\n * Eagerly prefetch assets.\n *\n * @param int|null $concurrency\n * @param string $event\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function prefetch($concurrency = null, $event = 'load')\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->prefetch($concurrency, $event);\n }\n\n /**\n * Use the \"waterfall\" prefetching strategy.\n *\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useWaterfallPrefetching($concurrency = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useWaterfallPrefetching($concurrency);\n }\n\n /**\n * Use the \"aggressive\" prefetching strategy.\n *\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useAggressivePrefetching()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useAggressivePrefetching();\n }\n\n /**\n * Set the prefetching strategy.\n *\n * @param 'waterfall'|'aggressive'|null $strategy\n * @param array $config\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function usePrefetchStrategy($strategy, $config = [])\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->usePrefetchStrategy($strategy, $config);\n }\n\n /**\n * Generate React refresh runtime script.\n *\n * @return \\Illuminate\\Support\\HtmlString|void\n * @static\n */\n public static function reactRefresh()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->reactRefresh();\n }\n\n /**\n * Get the URL for an asset.\n *\n * @param string $asset\n * @param string|null $buildDirectory\n * @return string\n * @static\n */\n public static function asset($asset, $buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->asset($asset, $buildDirectory);\n }\n\n /**\n * Get the content of a given asset.\n *\n * @param string $asset\n * @param string|null $buildDirectory\n * @return string\n * @throws \\Illuminate\\Foundation\\ViteException\n * @static\n */\n public static function content($asset, $buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->content($asset, $buildDirectory);\n }\n\n /**\n * Get a unique hash representing the current manifest, or null if there is no manifest.\n *\n * @param string|null $buildDirectory\n * @return string|null\n * @static\n */\n public static function manifestHash($buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->manifestHash($buildDirectory);\n }\n\n /**\n * Determine if the HMR server is running.\n *\n * @return bool\n * @static\n */\n public static function isRunningHot()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->isRunningHot();\n }\n\n /**\n * Get the Vite tag content as a string of HTML.\n *\n * @return string\n * @static\n */\n public static function toHtml()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->toHtml();\n }\n\n /**\n * Flush state.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n $instance->flush();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Foundation\\Vite::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Foundation\\Vite::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Foundation\\Vite::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Foundation\\Vite::flushMacros();\n }\n\n }\n /**\n * @method static void createSubscription(array|string $channels, \\Closure $callback, string $method = 'subscribe')\n * @method static \\Illuminate\\Redis\\Limiters\\ConcurrencyLimiterBuilder funnel(string $name)\n * @method static \\Illuminate\\Redis\\Limiters\\DurationLimiterBuilder throttle(string $name)\n * @method static mixed client()\n * @method static void subscribe(array|string $channels, \\Closure $callback)\n * @method static void psubscribe(array|string $channels, \\Closure $callback)\n * @method static mixed command(string $method, array $parameters = [])\n * @method static void listen(\\Closure $callback)\n * @method static string|null getName()\n * @method static \\Illuminate\\Redis\\Connections\\Connection setName(string $name)\n * @method static \\Illuminate\\Contracts\\Events\\Dispatcher getEventDispatcher()\n * @method static void setEventDispatcher(\\Illuminate\\Contracts\\Events\\Dispatcher $events)\n * @method static void unsetEventDispatcher()\n * @method static void macro(string $name, object|callable $macro)\n * @method static void mixin(object $mixin, bool $replace = true)\n * @method static bool hasMacro(string $name)\n * @method static void flushMacros()\n * @method static mixed macroCall(string $method, array $parameters)\n * @see \\Illuminate\\Redis\\RedisManager\n */\n class Redis {\n /**\n * Get a Redis connection by name.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Resolve the given connection by name.\n *\n * @param string|null $name\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function resolve($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->resolve($name);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array\n * @static\n */\n public static function connections()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->connections();\n }\n\n /**\n * Enable the firing of Redis command events.\n *\n * @return void\n * @static\n */\n public static function enableEvents()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->enableEvents();\n }\n\n /**\n * Disable the firing of Redis command events.\n *\n * @return void\n * @static\n */\n public static function disableEvents()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->disableEvents();\n }\n\n /**\n * Set the default driver.\n *\n * @param string $driver\n * @return void\n * @static\n */\n public static function setDriver($driver)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->setDriver($driver);\n }\n\n /**\n * Disconnect the given connection and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Redis\\RedisManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n }\n }\n\nnamespace Aws\\Laravel {\n /**\n * Facade for the AWS service\n *\n */\n class AwsFacade {\n /**\n * Get a client by name using an array of constructor options.\n *\n * @param string $name Service name or namespace (e.g., DynamoDb, s3).\n * @param array $args Arguments to configure the client.\n * @return \\Aws\\AwsClientInterface\n * @throws \\InvalidArgumentException if any required options are missing or\n * the service is not supported.\n * @see Aws\\AwsClient::__construct for a list of available options for args.\n * @static\n */\n public static function createClient($name, $args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->createClient($name, $args);\n }\n\n /**\n * @static\n */\n public static function createMultiRegionClient($name, $args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->createMultiRegionClient($name, $args);\n }\n\n /**\n * Clone existing SDK instance with ability to pass an associative array\n * of extra client settings.\n *\n * @param array $args\n * @return self\n * @static\n */\n public static function copy($args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->copy($args);\n }\n\n /**\n * Determine the endpoint prefix from a client namespace.\n *\n * @param string $name Namespace name\n * @return string\n * @internal\n * @deprecated Use the `\\Aws\\manifest()` function instead.\n * @static\n */\n public static function getEndpointPrefix($name)\n {\n return \\Aws\\Sdk::getEndpointPrefix($name);\n }\n\n }\n }\n\nnamespace Laravolt\\Avatar {\n /**\n */\n class Facade {\n /**\n * @static\n */\n public static function setGenerator($generator)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setGenerator($generator);\n }\n\n /**\n * @static\n */\n public static function create($name)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->create($name);\n }\n\n /**\n * @static\n */\n public static function applyTheme($config)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->applyTheme($config);\n }\n\n /**\n * @static\n */\n public static function addTheme($name, $config)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->addTheme($name, $config);\n }\n\n /**\n * @static\n */\n public static function toBase64()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toBase64();\n }\n\n /**\n * @static\n */\n public static function save($path, $quality = 90)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->save($path, $quality);\n }\n\n /**\n * @static\n */\n public static function toSvg()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toSvg();\n }\n\n /**\n * @static\n */\n public static function toGravatar($param = null)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toGravatar($param);\n }\n\n /**\n * @static\n */\n public static function getInitial()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getInitial();\n }\n\n /**\n * @static\n */\n public static function getImageObject()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getImageObject();\n }\n\n /**\n * @static\n */\n public static function buildAvatar()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->buildAvatar();\n }\n\n /**\n * @static\n */\n public static function getAttribute($key)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getAttribute($key);\n }\n\n /**\n * Get background color\n *\n * @static\n */\n public static function getBackground()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getBackground();\n }\n\n /**\n * Get foreground color\n *\n * @static\n */\n public static function getForeground()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getForeground();\n }\n\n /**\n * Get shape\n *\n * @static\n */\n public static function getShape()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getShape();\n }\n\n /**\n * @static\n */\n public static function setTheme($theme)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setTheme($theme);\n }\n\n /**\n * @static\n */\n public static function setBackground($hex)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBackground($hex);\n }\n\n /**\n * @static\n */\n public static function setForeground($hex)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setForeground($hex);\n }\n\n /**\n * @static\n */\n public static function setDimension($width, $height = null)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setDimension($width, $height);\n }\n\n /**\n * @static\n */\n public static function setResponsive($responsive)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setResponsive($responsive);\n }\n\n /**\n * @static\n */\n public static function setFontSize($size)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFontSize($size);\n }\n\n /**\n * @static\n */\n public static function setFontFamily($font)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFontFamily($font);\n }\n\n /**\n * @static\n */\n public static function setBorder($size, $color, $radius = 0)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBorder($size, $color, $radius);\n }\n\n /**\n * @static\n */\n public static function setBorderRadius($radius)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBorderRadius($radius);\n }\n\n /**\n * @static\n */\n public static function setShape($shape)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setShape($shape);\n }\n\n /**\n * @static\n */\n public static function setChars($chars)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setChars($chars);\n }\n\n /**\n * @static\n */\n public static function setFont($font)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFont($font);\n }\n\n }\n }\n\nnamespace Spatie\\Fractal\\Facades {\n /**\n * @see \\Spatie\\Fractal\\Fractal\n */\n class Fractal extends \\Spatie\\Fractalistic\\Fractal {\n /**\n * @param null|mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|\\League\\Fractal\\Serializer\\SerializerAbstract $serializer\n * @return static\n * @static\n */\n public static function create($data = null, $transformer = null, $serializer = null)\n {\n return \\Spatie\\Fractal\\Fractal::create($data, $transformer, $serializer);\n }\n\n /**\n * @static\n */\n public static function respond($statusCode = 200, $headers = [], $options = 0)\n {\n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->respond($statusCode, $headers, $options);\n }\n\n /**\n * Set the collection data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function collection($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->collection($data, $transformer, $resourceName);\n }\n\n /**\n * Set the item data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function item($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->item($data, $transformer, $resourceName);\n }\n\n /**\n * Set the primitive data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function primitive($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->primitive($data, $transformer, $resourceName);\n }\n\n /**\n * Set the data that must be transformed.\n *\n * @param string $dataType\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function data($dataType, $data, $transformer = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->data($dataType, $data, $transformer);\n }\n\n /**\n * Set the class or function that will perform the transform.\n *\n * @param string|callable|\\League\\Fractal\\TransformerAbstract|null $transformer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function transformWith($transformer)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->transformWith($transformer);\n }\n\n /**\n * Set the serializer to be used.\n *\n * @param string|\\League\\Fractal\\Serializer\\SerializerAbstract $serializer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function serializeWith($serializer)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->serializeWith($serializer);\n }\n\n /**\n * Set a Fractal paginator for the data.\n *\n * @param \\League\\Fractal\\Pagination\\PaginatorInterface $paginator\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function paginateWith($paginator)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->paginateWith($paginator);\n }\n\n /**\n * Set a Fractal cursor for the data.\n *\n * @param \\League\\Fractal\\Pagination\\CursorInterface $cursor\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function withCursor($cursor)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->withCursor($cursor);\n }\n\n /**\n * Specify the includes.\n *\n * @param array|string $includes Array or string of resources to include.\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseIncludes($includes)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseIncludes($includes);\n }\n\n /**\n * Specify the excludes.\n *\n * @param array|string $excludes Array or string of resources to exclude.\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseExcludes($excludes)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseExcludes($excludes);\n }\n\n /**\n * Specify the fieldsets to include in the response.\n *\n * @param array $fieldsets array with key = resourceName and value = fields to include\n * (array or comma separated string with field names)\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseFieldsets($fieldsets)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseFieldsets($fieldsets);\n }\n\n /**\n * Set the meta data.\n *\n * @param $array,...\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function addMeta()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->addMeta();\n }\n\n /**\n * Set the resource name, to replace 'data' as the root of the collection or item.\n *\n * @param string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function withResourceName($resourceName)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->withResourceName($resourceName);\n }\n\n /**\n * Upper limit to how many levels of included data are allowed.\n *\n * @param int $recursionLimit\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function limitRecursion($recursionLimit)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->limitRecursion($recursionLimit);\n }\n\n /**\n * Perform the transformation to json.\n *\n * @param int $options\n * @return string\n * @static\n */\n public static function toJson($options = 0)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->toJson($options);\n }\n\n /**\n * Perform the transformation to array.\n *\n * @return array|null\n * @static\n */\n public static function toArray()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->toArray();\n }\n\n /**\n * Create fractal data.\n *\n * @return \\League\\Fractal\\Scope\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @throws \\Spatie\\Fractalistic\\Exceptions\\NoTransformerSpecified\n * @static\n */\n public static function createData()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->createData();\n }\n\n /**\n * Get the resource class.\n *\n * @return string\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @static\n */\n public static function getResourceClass()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResourceClass();\n }\n\n /**\n * Get the resource.\n *\n * @return \\League\\Fractal\\Resource\\ResourceInterface\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @static\n */\n public static function getResource()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResource();\n }\n\n /**\n * Return the name of the resource.\n *\n * @return string|null\n * @static\n */\n public static function getResourceName()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResourceName();\n }\n\n /**\n * Convert the object into something JSON serializable.\n *\n * @return array|null\n * @static\n */\n public static function jsonSerialize()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->jsonSerialize();\n }\n\n /**\n * Get the transformer.\n *\n * @return string|callable|\\League\\Fractal\\TransformerAbstract|null\n * @static\n */\n public static function getTransformer()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getTransformer();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Spatie\\Fractal\\Fractal::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Spatie\\Fractal\\Fractal::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Spatie\\Fractal\\Fractal::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Spatie\\Fractal\\Fractal::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n }\n\nnamespace Laratrust {\n /**\n */\n class LaratrustFacade {\n /**\n * Checks if the current user has a role by its name.\n *\n * @static\n */\n public static function hasRole($role, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->hasRole($role, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a permission by its name.\n *\n * @static\n */\n public static function hasPermission($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->hasPermission($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user does not have a permission by its name.\n *\n * @static\n */\n public static function doesntHavePermission($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->doesntHavePermission($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a permission by its name.\n * \n * Alias to hasPermission.\n *\n * @static\n */\n public static function isAbleTo($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->isAbleTo($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user does not have a permission by its name.\n * \n * Alias to doesntHavePermission.\n *\n * @static\n */\n public static function isNotAbleTo($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->isNotAbleTo($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a role or permission by its name.\n *\n * @param array|string $roles The role(s) needed.\n * @param array|string $permissions The permission(s) needed.\n * @param array $options The Options.\n * @return bool\n * @static\n */\n public static function ability($roles, $permissions, $team = null, $options = [])\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->ability($roles, $permissions, $team, $options);\n }\n\n }\n }\n\nnamespace Sentry\\Laravel {\n /**\n * @see \\Sentry\\State\\HubInterface\n */\n class Facade {\n /**\n * Gets the client bound to the top of the stack.\n *\n * @static\n */\n public static function getClient()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getClient();\n }\n\n /**\n * Gets the ID of the last captured event.\n *\n * @static\n */\n public static function getLastEventId()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getLastEventId();\n }\n\n /**\n * Creates a new scope to store context information that will be layered on\n * top of the current one. It is isolated, i.e. all breadcrumbs and context\n * information added to this scope will be removed once the scope ends. Be\n * sure to always remove this scope with {@see Hub::popScope} when the\n * operation finishes or throws.\n *\n * @static\n */\n public static function pushScope()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->pushScope();\n }\n\n /**\n * Removes a previously pushed scope from the stack. This restores the state\n * before the scope was pushed. All breadcrumbs and context information added\n * since the last call to {@see Hub::pushScope} are discarded.\n *\n * @static\n */\n public static function popScope()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->popScope();\n }\n\n /**\n * Creates a new scope with and executes the given operation within. The scope\n * is automatically removed once the operation finishes or throws.\n *\n * @param callable $callback The callback to be executed\n * @return mixed|void The callback's return value, upon successful execution\n * @psalm-template T\n * @psalm-param callable(Scope): T $callback\n * @psalm-return T\n * @static\n */\n public static function withScope($callback)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->withScope($callback);\n }\n\n /**\n * Calls the given callback passing to it the current scope so that any\n * operation can be run within its context.\n *\n * @static\n */\n public static function configureScope($callback)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->configureScope($callback);\n }\n\n /**\n * Binds the given client to the current scope.\n *\n * @static\n */\n public static function bindClient($client)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->bindClient($client);\n }\n\n /**\n * Captures a message event and sends it to Sentry.\n *\n * @static\n */\n public static function captureMessage($message, $level = null, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureMessage($message, $level, $hint);\n }\n\n /**\n * Captures an exception event and sends it to Sentry.\n *\n * @static\n */\n public static function captureException($exception, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureException($exception, $hint);\n }\n\n /**\n * Captures a new event using the provided data.\n *\n * @static\n */\n public static function captureEvent($event, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureEvent($event, $hint);\n }\n\n /**\n * Captures an event that logs the last occurred error.\n *\n * @static\n */\n public static function captureLastError($hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureLastError($hint);\n }\n\n /**\n * Captures a check-in.\n *\n * @param int|float|null $duration\n * @param int|float|null $duration\n * @static\n */\n public static function captureCheckIn($slug, $status, $duration = null, $monitorConfig = null, $checkInId = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureCheckIn($slug, $status, $duration, $monitorConfig, $checkInId);\n }\n\n /**\n * Records a new breadcrumb which will be attached to future events. They\n * will be added to subsequent events to provide more context on user's\n * actions prior to an error or crash.\n *\n * @static\n */\n public static function addBreadcrumb($breadcrumb)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->addBreadcrumb($breadcrumb);\n }\n\n /**\n * Gets the integration whose FQCN matches the given one if it's available on the current client.\n *\n * @param string $className The FQCN of the integration\n * @psalm-template T of IntegrationInterface\n * @psalm-param class-string<T> $className\n * @psalm-return T|null\n * @static\n */\n public static function getIntegration($className)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getIntegration($className);\n }\n\n /**\n * Starts a new `Transaction` and returns it. This is the entry point to manual\n * tracing instrumentation.\n * \n * A tree structure can be built by adding child spans to the transaction, and\n * child spans to other spans. To start a new child span within the transaction\n * or any span, call the respective `startChild()` method.\n * \n * Every child span must be finished before the transaction is finished,\n * otherwise the unfinished spans are discarded.\n * \n * The transaction must be finished with a call to its `finish()` method, at\n * which point the transaction with all its finished child spans will be sent to\n * Sentry.\n *\n * @param array<string, mixed> $customSamplingContext Additional context that will be passed to the {@see SamplingContext}\n * @param array<string, mixed> $customSamplingContext Additional context that will be passed to the {@see SamplingContext}\n * @static\n */\n public static function startTransaction($context, $customSamplingContext = [])\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->startTransaction($context, $customSamplingContext);\n }\n\n /**\n * Returns the transaction that is on the Hub.\n *\n * @static\n */\n public static function getTransaction()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getTransaction();\n }\n\n /**\n * Sets the span on the Hub.\n *\n * @static\n */\n public static function setSpan($span)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->setSpan($span);\n }\n\n /**\n * Returns the span that is on the Hub.\n *\n * @static\n */\n public static function getSpan()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getSpan();\n }\n\n }\n }\n\nnamespace League\\StatsD\\Laravel5\\Facade {\n /**\n * Facade for Statsd Package\n *\n * @author Aran Wilkinson <aran@aranw.net>\n * @package League\\StatsD\\Laravel5\\Facade\n */\n class StatsdFacade {\n /**\n * Singleton Reference\n *\n * @static\n */\n public static function instance($name = 'default')\n {\n return \\League\\StatsD\\Client::instance($name);\n }\n\n /**\n * Initialize Connection Details\n *\n * @param array $options Configuration options\n * @return \\League\\StatsD\\Client This instance\n * @throws ConfigurationException If port is invalid\n * @static\n */\n public static function configure($options = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->configure($options);\n }\n\n /**\n * @static\n */\n public static function getHost()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getHost();\n }\n\n /**\n * @static\n */\n public static function getPort()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getPort();\n }\n\n /**\n * @static\n */\n public static function getNamespace()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getNamespace();\n }\n\n /**\n * Get Last message sent to server\n *\n * @static\n */\n public static function getLastMessage()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getLastMessage();\n }\n\n /**\n * Increment a metric\n *\n * @param string|array $metrics Metric(s) to increment\n * @param int $delta Value to decrement the metric by\n * @param float $sampleRate Sample rate of metric\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function increment($metrics, $delta = 1, $sampleRate = 1.0, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->increment($metrics, $delta, $sampleRate, $tags);\n }\n\n /**\n * Decrement a metric\n *\n * @param string|array $metrics Metric(s) to decrement\n * @param int $delta Value to increment the metric by\n * @param float $sampleRate Sample rate of metric\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function decrement($metrics, $delta = 1, $sampleRate = 1.0, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->decrement($metrics, $delta, $sampleRate, $tags);\n }\n\n /**\n * Start timing the given metric\n *\n * @param string $metric Metric to time\n * @static\n */\n public static function startTiming($metric)\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->startTiming($metric);\n }\n\n /**\n * End timing the given metric and record\n *\n * @param string $metric Metric to time\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function endTiming($metric, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->endTiming($metric, $tags);\n }\n\n /**\n * Timing\n *\n * @param string $metric Metric to track\n * @param float $time Time in milliseconds\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function timing($metric, $time, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->timing($metric, $time, $tags);\n }\n\n /**\n * Send multiple timing metrics at once\n *\n * @param array $metrics key value map of metric name -> timing value\n * @throws ConnectionException\n * @static\n */\n public static function timings($metrics)\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->timings($metrics);\n }\n\n /**\n * Time a function\n *\n * @param string $metric Metric to time\n * @param callable $func Function to record\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function time($metric, $func, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->time($metric, $func, $tags);\n }\n\n /**\n * Gauges\n *\n * @param string $metric Metric to gauge\n * @param int|float $value Set the value of the gauge\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function gauge($metric, $value, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->gauge($metric, $value, $tags);\n }\n\n /**\n * Sets - count the number of unique values passed to a key\n *\n * @param string $metric\n * @param mixed $value\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function set($metric, $value, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->set($metric, $value, $tags);\n }\n\n }\n }\n\nnamespace Barryvdh\\Debugbar\\Facades {\n /**\n * @method static void alert(mixed $message)\n * @method static void critical(mixed $message)\n * @method static void debug(mixed $message)\n * @method static void emergency(mixed $message)\n * @method static void error(mixed $message)\n * @method static void info(mixed $message)\n * @method static void log(mixed $message)\n * @method static void notice(mixed $message)\n * @method static void warning(mixed $message)\n * @see \\Barryvdh\\Debugbar\\LaravelDebugbar\n */\n class Debugbar extends \\DebugBar\\DebugBar {\n /**\n * Returns the HTTP driver\n * \n * If no http driver where defined, a PhpHttpDriver is automatically created\n *\n * @return \\DebugBar\\HttpDriverInterface\n * @static\n */\n public static function getHttpDriver()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getHttpDriver();\n }\n\n /**\n * Enable the Debugbar and boot, if not already booted.\n *\n * @static\n */\n public static function enable()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->enable();\n }\n\n /**\n * Boot the debugbar (add collectors, renderer and listener)\n *\n * @static\n */\n public static function boot()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->boot();\n }\n\n /**\n * @static\n */\n public static function shouldCollect($name, $default = false)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->shouldCollect($name, $default);\n }\n\n /**\n * Adds a data collector\n *\n * @param \\DebugBar\\DataCollector\\DataCollectorInterface $collector\n * @throws DebugBarException\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function addCollector($collector)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addCollector($collector);\n }\n\n /**\n * Handle silenced errors\n *\n * @param $level\n * @param $message\n * @param string $file\n * @param int $line\n * @param array $context\n * @throws \\ErrorException\n * @static\n */\n public static function handleError($level, $message, $file = '', $line = 0, $context = [])\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->handleError($level, $message, $file, $line, $context);\n }\n\n /**\n * Starts a measure\n *\n * @param string $name Internal name, used to stop the measure\n * @param string $label Public name\n * @param string|null $collector\n * @param string|null $group\n * @static\n */\n public static function startMeasure($name, $label = null, $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->startMeasure($name, $label, $collector, $group);\n }\n\n /**\n * Stops a measure\n *\n * @param string $name\n * @static\n */\n public static function stopMeasure($name)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->stopMeasure($name);\n }\n\n /**\n * Adds an exception to be profiled in the debug bar\n *\n * @param \\Exception $e\n * @deprecated in favor of addThrowable\n * @static\n */\n public static function addException($e)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addException($e);\n }\n\n /**\n * Adds an exception to be profiled in the debug bar\n *\n * @param \\Throwable $e\n * @static\n */\n public static function addThrowable($e)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addThrowable($e);\n }\n\n /**\n * Returns a JavascriptRenderer for this instance\n *\n * @param string $baseUrl\n * @param string $basePath\n * @return \\Barryvdh\\Debugbar\\JavascriptRenderer\n * @static\n */\n public static function getJavascriptRenderer($baseUrl = null, $basePath = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getJavascriptRenderer($baseUrl, $basePath);\n }\n\n /**\n * Modify the response and inject the debugbar (or data in headers)\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param \\Symfony\\Component\\HttpFoundation\\Response $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function modifyResponse($request, $response)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->modifyResponse($request, $response);\n }\n\n /**\n * Check if the Debugbar is enabled\n *\n * @return boolean\n * @static\n */\n public static function isEnabled()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isEnabled();\n }\n\n /**\n * Collects the data from the collectors\n *\n * @return array\n * @static\n */\n public static function collect()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->collect();\n }\n\n /**\n * Injects the web debug toolbar into the given Response.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Response $response A Response instance\n * Based on https://github.com/symfony/WebProfilerBundle/blob/master/EventListener/WebDebugToolbarListener.php\n * @static\n */\n public static function injectDebugbar($response)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->injectDebugbar($response);\n }\n\n /**\n * Checks if there is stacked data in the session\n *\n * @return boolean\n * @static\n */\n public static function hasStackedData()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->hasStackedData();\n }\n\n /**\n * Returns the data stacked in the session\n *\n * @param boolean $delete Whether to delete the data in the session\n * @return array\n * @static\n */\n public static function getStackedData($delete = true)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStackedData($delete);\n }\n\n /**\n * Disable the Debugbar\n *\n * @static\n */\n public static function disable()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->disable();\n }\n\n /**\n * Adds a measure\n *\n * @param string $label\n * @param float $start\n * @param float $end\n * @param array|null $params\n * @param string|null $collector\n * @param string|null $group\n * @static\n */\n public static function addMeasure($label, $start, $end, $params = [], $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addMeasure($label, $start, $end, $params, $collector, $group);\n }\n\n /**\n * Utility function to measure the execution of a Closure\n *\n * @param string $label\n * @param \\Closure $closure\n * @param string|null $collector\n * @param string|null $group\n * @return mixed\n * @static\n */\n public static function measure($label, $closure, $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->measure($label, $closure, $collector, $group);\n }\n\n /**\n * Collect data in a CLI request\n *\n * @return array\n * @static\n */\n public static function collectConsole()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->collectConsole();\n }\n\n /**\n * Adds a message to the MessagesCollector\n * \n * A message can be anything from an object to a string\n *\n * @param mixed $message\n * @param string $label\n * @static\n */\n public static function addMessage($message, $label = 'info')\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addMessage($message, $label);\n }\n\n /**\n * Checks if a data collector has been added\n *\n * @param string $name\n * @return boolean\n * @static\n */\n public static function hasCollector($name)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->hasCollector($name);\n }\n\n /**\n * Returns a data collector\n *\n * @param string $name\n * @return \\DebugBar\\DataCollector\\DataCollectorInterface\n * @throws DebugBarException\n * @static\n */\n public static function getCollector($name)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCollector($name);\n }\n\n /**\n * Returns an array of all data collectors\n *\n * @return array[DataCollectorInterface]\n * @static\n */\n public static function getCollectors()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCollectors();\n }\n\n /**\n * Sets the request id generator\n *\n * @param \\DebugBar\\RequestIdGeneratorInterface $generator\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setRequestIdGenerator($generator)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setRequestIdGenerator($generator);\n }\n\n /**\n * @return \\DebugBar\\RequestIdGeneratorInterface\n * @static\n */\n public static function getRequestIdGenerator()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getRequestIdGenerator();\n }\n\n /**\n * Returns the id of the current request\n *\n * @return string\n * @static\n */\n public static function getCurrentRequestId()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCurrentRequestId();\n }\n\n /**\n * Sets the storage backend to use to store the collected data\n *\n * @param \\DebugBar\\StorageInterface $storage\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStorage($storage = null)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStorage($storage);\n }\n\n /**\n * @return \\DebugBar\\StorageInterface\n * @static\n */\n public static function getStorage()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStorage();\n }\n\n /**\n * Checks if the data will be persisted\n *\n * @return boolean\n * @static\n */\n public static function isDataPersisted()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isDataPersisted();\n }\n\n /**\n * Sets the HTTP driver\n *\n * @param \\DebugBar\\HttpDriverInterface $driver\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setHttpDriver($driver)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setHttpDriver($driver);\n }\n\n /**\n * Returns collected data\n * \n * Will collect the data if none have been collected yet\n *\n * @return array\n * @static\n */\n public static function getData()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getData();\n }\n\n /**\n * Returns an array of HTTP headers containing the data\n *\n * @param string $headerName\n * @param integer $maxHeaderLength\n * @return array\n * @static\n */\n public static function getDataAsHeaders($headerName = 'phpdebugbar', $maxHeaderLength = 4096, $maxTotalHeaderLength = 250000)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getDataAsHeaders($headerName, $maxHeaderLength, $maxTotalHeaderLength);\n }\n\n /**\n * Sends the data through the HTTP headers\n *\n * @param bool $useOpenHandler\n * @param string $headerName\n * @param integer $maxHeaderLength\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function sendDataInHeaders($useOpenHandler = null, $headerName = 'phpdebugbar', $maxHeaderLength = 4096)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->sendDataInHeaders($useOpenHandler, $headerName, $maxHeaderLength);\n }\n\n /**\n * Stacks the data in the session for later rendering\n *\n * @static\n */\n public static function stackData()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->stackData();\n }\n\n /**\n * Sets the key to use in the $_SESSION array\n *\n * @param string $ns\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStackDataSessionNamespace($ns)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStackDataSessionNamespace($ns);\n }\n\n /**\n * Returns the key used in the $_SESSION array\n *\n * @return string\n * @static\n */\n public static function getStackDataSessionNamespace()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStackDataSessionNamespace();\n }\n\n /**\n * Sets whether to only use the session to store stacked data even\n * if a storage is enabled\n *\n * @param boolean $enabled\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStackAlwaysUseSessionStorage($enabled = true)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStackAlwaysUseSessionStorage($enabled);\n }\n\n /**\n * Checks if the session is always used to store stacked data\n * even if a storage is enabled\n *\n * @return boolean\n * @static\n */\n public static function isStackAlwaysUseSessionStorage()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isStackAlwaysUseSessionStorage();\n }\n\n /**\n * @static\n */\n public static function offsetSet($key, $value)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetSet($key, $value);\n }\n\n /**\n * @static\n */\n public static function offsetGet($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * @static\n */\n public static function offsetExists($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * @static\n */\n public static function offsetUnset($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetUnset($key);\n }\n\n }\n }\n\nnamespace Barryvdh\\DomPDF\\Facade {\n /**\n * @method static BasePDF setBaseHost(string $baseHost)\n * @method static BasePDF setBasePath(string $basePath)\n * @method static BasePDF setCanvas(\\Dompdf\\Canvas $canvas)\n * @method static BasePDF setCallbacks(array<string, mixed> $callbacks)\n * @method static BasePDF setCss(\\Dompdf\\Css\\Stylesheet $css)\n * @method static BasePDF setDefaultView(string $defaultView, array<string, mixed> $options)\n * @method static BasePDF setDom(\\DOMDocument $dom)\n * @method static BasePDF setFontMetrics(\\Dompdf\\FontMetrics $fontMetrics)\n * @method static BasePDF setHttpContext(resource|array<string, mixed> $httpContext)\n * @method static BasePDF setPaper(string|float[] $paper, string $orientation = 'portrait')\n * @method static BasePDF setProtocol(string $protocol)\n * @method static BasePDF setTree(\\Dompdf\\Frame\\FrameTree $tree)\n */\n class Pdf {\n /**\n * Get the DomPDF instance\n *\n * @static\n */\n public static function getDomPDF()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->getDomPDF();\n }\n\n /**\n * Show or hide warnings\n *\n * @static\n */\n public static function setWarnings($warnings)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setWarnings($warnings);\n }\n\n /**\n * Load a HTML string\n *\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadHTML($string, $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadHTML($string, $encoding);\n }\n\n /**\n * Load a HTML file\n *\n * @static\n */\n public static function loadFile($file)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadFile($file);\n }\n\n /**\n * Add metadata info\n *\n * @param array<string, string> $info\n * @static\n */\n public static function addInfo($info)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->addInfo($info);\n }\n\n /**\n * Load a View and convert to HTML\n *\n * @param array<string, mixed> $data\n * @param array<string, mixed> $mergeData\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadView($view, $data = [], $mergeData = [], $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadView($view, $data, $mergeData, $encoding);\n }\n\n /**\n * Set/Change an option (or array of options) in Dompdf\n *\n * @param array<string, mixed>|string $attribute\n * @param null|mixed $value\n * @static\n */\n public static function setOption($attribute, $value = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOption($attribute, $value);\n }\n\n /**\n * Replace all the Options from DomPDF\n *\n * @param array<string, mixed> $options\n * @static\n */\n public static function setOptions($options, $mergeWithDefaults = false)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOptions($options, $mergeWithDefaults);\n }\n\n /**\n * Output the PDF as a string.\n * \n * The options parameter controls the output. Accepted options are:\n * \n * 'compress' = > 1 or 0 - apply content stream compression, this is\n * on (1) by default\n *\n * @param array<string, int> $options\n * @return string The rendered PDF as string\n * @static\n */\n public static function output($options = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->output($options);\n }\n\n /**\n * Save the PDF to a file\n *\n * @static\n */\n public static function save($filename, $disk = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->save($filename, $disk);\n }\n\n /**\n * Make the PDF downloadable by the user\n *\n * @static\n */\n public static function download($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->download($filename);\n }\n\n /**\n * Return a response with the PDF to show in the browser\n *\n * @static\n */\n public static function stream($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->stream($filename);\n }\n\n /**\n * Render the PDF\n *\n * @static\n */\n public static function render()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->render();\n }\n\n /**\n * @param array<string> $pc\n * @static\n */\n public static function setEncryption($password, $ownerpassword = '', $pc = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setEncryption($password, $ownerpassword, $pc);\n }\n\n }\n /**\n * @method static BasePDF setBaseHost(string $baseHost)\n * @method static BasePDF setBasePath(string $basePath)\n * @method static BasePDF setCanvas(\\Dompdf\\Canvas $canvas)\n * @method static BasePDF setCallbacks(array<string, mixed> $callbacks)\n * @method static BasePDF setCss(\\Dompdf\\Css\\Stylesheet $css)\n * @method static BasePDF setDefaultView(string $defaultView, array<string, mixed> $options)\n * @method static BasePDF setDom(\\DOMDocument $dom)\n * @method static BasePDF setFontMetrics(\\Dompdf\\FontMetrics $fontMetrics)\n * @method static BasePDF setHttpContext(resource|array<string, mixed> $httpContext)\n * @method static BasePDF setPaper(string|float[] $paper, string $orientation = 'portrait')\n * @method static BasePDF setProtocol(string $protocol)\n * @method static BasePDF setTree(\\Dompdf\\Frame\\FrameTree $tree)\n */\n class Pdf {\n /**\n * Get the DomPDF instance\n *\n * @static\n */\n public static function getDomPDF()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->getDomPDF();\n }\n\n /**\n * Show or hide warnings\n *\n * @static\n */\n public static function setWarnings($warnings)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setWarnings($warnings);\n }\n\n /**\n * Load a HTML string\n *\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadHTML($string, $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadHTML($string, $encoding);\n }\n\n /**\n * Load a HTML file\n *\n * @static\n */\n public static function loadFile($file)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadFile($file);\n }\n\n /**\n * Add metadata info\n *\n * @param array<string, string> $info\n * @static\n */\n public static function addInfo($info)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->addInfo($info);\n }\n\n /**\n * Load a View and convert to HTML\n *\n * @param array<string, mixed> $data\n * @param array<string, mixed> $mergeData\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadView($view, $data = [], $mergeData = [], $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadView($view, $data, $mergeData, $encoding);\n }\n\n /**\n * Set/Change an option (or array of options) in Dompdf\n *\n * @param array<string, mixed>|string $attribute\n * @param null|mixed $value\n * @static\n */\n public static function setOption($attribute, $value = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOption($attribute, $value);\n }\n\n /**\n * Replace all the Options from DomPDF\n *\n * @param array<string, mixed> $options\n * @static\n */\n public static function setOptions($options, $mergeWithDefaults = false)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOptions($options, $mergeWithDefaults);\n }\n\n /**\n * Output the PDF as a string.\n * \n * The options parameter controls the output. Accepted options are:\n * \n * 'compress' = > 1 or 0 - apply content stream compression, this is\n * on (1) by default\n *\n * @param array<string, int> $options\n * @return string The rendered PDF as string\n * @static\n */\n public static function output($options = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->output($options);\n }\n\n /**\n * Save the PDF to a file\n *\n * @static\n */\n public static function save($filename, $disk = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->save($filename, $disk);\n }\n\n /**\n * Make the PDF downloadable by the user\n *\n * @static\n */\n public static function download($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->download($filename);\n }\n\n /**\n * Return a response with the PDF to show in the browser\n *\n * @static\n */\n public static function stream($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->stream($filename);\n }\n\n /**\n * Render the PDF\n *\n * @static\n */\n public static function render()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->render();\n }\n\n /**\n * @param array<string> $pc\n * @static\n */\n public static function setEncryption($password, $ownerpassword = '', $pc = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setEncryption($password, $ownerpassword, $pc);\n }\n\n }\n }\n\nnamespace ChaseConey\\LaravelDatadogHelper {\n /**\n * @see LaravelDatadogHelper\n * @see \\Datadog\\DogStatsd\n */\n class Datadog extends \\DataDog\\DogStatsd {\n /**\n * @static\n */\n public static function send($data, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->send($data, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Log timing information\n *\n * @param string $stat The metric to in log timing info for.\n * @param float $time The elapsed time (ms) to log\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function timing($stat, $time, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->timing($stat, $time, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * A convenient alias for the timing function when used with micro-timing\n *\n * @param string $stat The metric name\n * @param float $time The elapsed time to log, IN SECONDS\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function microtiming($stat, $time, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->microtiming($stat, $time, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Gauge\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function gauge($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->gauge($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Histogram\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function histogram($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->histogram($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Distribution\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function distribution($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->distribution($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Set\n *\n * @param string $stat The metric\n * @param string|float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function set($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->set($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Increments one or more stats counters\n *\n * @param string|array $stats The metric(s) to increment.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param int $value the amount to increment by (default 1)\n * @return void\n * @static\n */\n public static function increment($stats, $sampleRate = 1.0, $tags = null, $value = 1, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->increment($stats, $sampleRate, $tags, $value, $cardinality);\n }\n\n /**\n * Decrements one or more stats counters.\n *\n * @param string|array $stats The metric(s) to decrement.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param int $value the amount to decrement by (default -1)\n * @return void\n * @static\n */\n public static function decrement($stats, $sampleRate = 1.0, $tags = null, $value = -1, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->decrement($stats, $sampleRate, $tags, $value, $cardinality);\n }\n\n /**\n * Updates one or more stats counters by arbitrary amounts.\n *\n * @param string|array $stats The metric(s) to update. Should be either a string or array of metrics.\n * @param int $delta The amount to increment/decrement each metric by.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function updateStats($stats, $delta = 1, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->updateStats($stats, $delta, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * @deprecated service_check will be removed in future versions in favor of serviceCheck\n * \n * Send a custom service check status over UDP\n * @param string $name service check name\n * @param int $status service check status code (see OK, WARNING,...)\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param string $hostname hostname to associate with this service check status\n * @param string $message message to associate with this service check status\n * @param int $timestamp timestamp for the service check status (defaults to now)\n * @return void\n * @static\n */\n public static function service_check($name, $status, $tags = null, $hostname = null, $message = null, $timestamp = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->service_check($name, $status, $tags, $hostname, $message, $timestamp);\n }\n\n /**\n * Send a custom service check status over UDP\n *\n * @param string $name service check name\n * @param int $status service check status code (see OK, WARNING,...)\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param string $hostname hostname to associate with this service check status\n * @param string $message message to associate with this service check status\n * @param int $timestamp timestamp for the service check status (defaults to now)\n * @return void\n * @static\n */\n public static function serviceCheck($name, $status, $tags = null, $hostname = null, $message = null, $timestamp = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->serviceCheck($name, $status, $tags, $hostname, $message, $timestamp);\n }\n\n /**\n * @static\n */\n public static function report($message)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->report($message);\n }\n\n /**\n * @throws \\Exception|\\Throwable\n * @static\n */\n public static function flush($message)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->flush($message);\n }\n\n /**\n * Formats $vals array into event for submission to Datadog via UDP\n *\n * @param array $vals Optional values of the event. See\n * https://docs.datadoghq.com/api/?lang=bash#post-an-event for the valid keys\n * @return bool\n * @static\n */\n public static function event($title, $vals = [])\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->event($title, $vals);\n }\n\n /**\n * @static\n */\n public static function setMetricsPrefix($metricsPrefix)\n {\n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->setMetricsPrefix($metricsPrefix);\n }\n\n }\n }\n\nnamespace Spatie\\LaravelIgnition\\Facades {\n /**\n * @see \\Spatie\\FlareClient\\Flare\n */\n class Flare {\n /**\n * @static\n */\n public static function make($apiKey = null, $contextDetector = null)\n {\n return \\Spatie\\FlareClient\\Flare::make($apiKey, $contextDetector);\n }\n\n /**\n * @static\n */\n public static function setApiToken($apiToken)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setApiToken($apiToken);\n }\n\n /**\n * @static\n */\n public static function apiTokenSet()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->apiTokenSet();\n }\n\n /**\n * @static\n */\n public static function setBaseUrl($baseUrl)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setBaseUrl($baseUrl);\n }\n\n /**\n * @static\n */\n public static function setStage($stage)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setStage($stage);\n }\n\n /**\n * @static\n */\n public static function sendReportsImmediately()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->sendReportsImmediately();\n }\n\n /**\n * @static\n */\n public static function determineVersionUsing($determineVersionCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->determineVersionUsing($determineVersionCallable);\n }\n\n /**\n * @static\n */\n public static function reportErrorLevels($reportErrorLevels)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportErrorLevels($reportErrorLevels);\n }\n\n /**\n * @static\n */\n public static function filterExceptionsUsing($filterExceptionsCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->filterExceptionsUsing($filterExceptionsCallable);\n }\n\n /**\n * @static\n */\n public static function filterReportsUsing($filterReportsCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->filterReportsUsing($filterReportsCallable);\n }\n\n /**\n * @param array<class-string<ArgumentReducer>|ArgumentReducer>|\\Spatie\\Backtrace\\Arguments\\ArgumentReducers|null $argumentReducers\n * @static\n */\n public static function argumentReducers($argumentReducers)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->argumentReducers($argumentReducers);\n }\n\n /**\n * @static\n */\n public static function withStackFrameArguments($withStackFrameArguments = true, $forcePHPIniSetting = false)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->withStackFrameArguments($withStackFrameArguments, $forcePHPIniSetting);\n }\n\n /**\n * @param class-string $exceptionClass\n * @static\n */\n public static function overrideGrouping($exceptionClass, $type = 'exception_message_and_class')\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->overrideGrouping($exceptionClass, $type);\n }\n\n /**\n * @static\n */\n public static function version()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->version();\n }\n\n /**\n * @return array<int, FlareMiddleware|class-string<FlareMiddleware>>\n * @static\n */\n public static function getMiddleware()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getMiddleware();\n }\n\n /**\n * @static\n */\n public static function setContextProviderDetector($contextDetector)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setContextProviderDetector($contextDetector);\n }\n\n /**\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * @static\n */\n public static function registerFlareHandlers()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerFlareHandlers();\n }\n\n /**\n * @static\n */\n public static function registerExceptionHandler()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerExceptionHandler();\n }\n\n /**\n * @static\n */\n public static function registerErrorHandler($errorLevels = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerErrorHandler($errorLevels);\n }\n\n /**\n * @param \\Spatie\\FlareClient\\FlareMiddleware\\FlareMiddleware|array<FlareMiddleware>|class-string<FlareMiddleware>|callable $middleware\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function registerMiddleware($middleware)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerMiddleware($middleware);\n }\n\n /**\n * @return array<int,FlareMiddleware|class-string<FlareMiddleware>>\n * @static\n */\n public static function getMiddlewares()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getMiddlewares();\n }\n\n /**\n * @param string $name\n * @param string $messageLevel\n * @param array<int, mixed> $metaData\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function glow($name, $messageLevel = 'info', $metaData = [])\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->glow($name, $messageLevel, $metaData);\n }\n\n /**\n * @static\n */\n public static function handleException($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->handleException($throwable);\n }\n\n /**\n * @return mixed\n * @static\n */\n public static function handleError($code, $message, $file = '', $line = 0)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->handleError($code, $message, $file, $line);\n }\n\n /**\n * @static\n */\n public static function applicationPath($applicationPath)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->applicationPath($applicationPath);\n }\n\n /**\n * @static\n */\n public static function report($throwable, $callback = null, $report = null, $handled = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->report($throwable, $callback, $report, $handled);\n }\n\n /**\n * @static\n */\n public static function reportHandled($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportHandled($throwable);\n }\n\n /**\n * @static\n */\n public static function reportMessage($message, $logLevel, $callback = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportMessage($message, $logLevel, $callback);\n }\n\n /**\n * @static\n */\n public static function sendTestReport($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->sendTestReport($throwable);\n }\n\n /**\n * @static\n */\n public static function reset()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reset();\n }\n\n /**\n * @static\n */\n public static function anonymizeIp()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->anonymizeIp();\n }\n\n /**\n * @param array<int, string> $fieldNames\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function censorRequestBodyFields($fieldNames)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->censorRequestBodyFields($fieldNames);\n }\n\n /**\n * @static\n */\n public static function createReport($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->createReport($throwable);\n }\n\n /**\n * @static\n */\n public static function createReportFromMessage($message, $logLevel)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->createReportFromMessage($message, $logLevel);\n }\n\n /**\n * @static\n */\n public static function stage($stage)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->stage($stage);\n }\n\n /**\n * @static\n */\n public static function messageLevel($messageLevel)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->messageLevel($messageLevel);\n }\n\n /**\n * @param string $groupName\n * @param mixed $default\n * @return array<int, mixed>\n * @static\n */\n public static function getGroup($groupName = 'context', $default = [])\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getGroup($groupName, $default);\n }\n\n /**\n * @static\n */\n public static function context($key, $value)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->context($key, $value);\n }\n\n /**\n * @param string $groupName\n * @param array<string, mixed> $properties\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function group($groupName, $properties)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->group($groupName, $properties);\n }\n\n }\n }\n\nnamespace Vinkla\\Hashids\\Facades {\n /**\n * @method static string encode(mixed ...$numbers)\n * @method static array decode(string $hash)\n * @method static string encodeHex(string $str)\n * @method static string decodeHex(string $hash)\n */\n class Hashids extends \\GrahamCampbell\\Manager\\AbstractManager {\n /**\n * @static\n */\n public static function getFactory()\n {\n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getFactory();\n }\n\n /**\n * Get a connection instance.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return object\n * @static\n */\n public static function connection($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Reconnect to the given connection.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return object\n * @static\n */\n public static function reconnect($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->reconnect($name);\n }\n\n /**\n * Disconnect from the given connection.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function disconnect($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->disconnect($name);\n }\n\n /**\n * Get the configuration for a connection.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return array\n * @static\n */\n public static function getConnectionConfig($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConnectionConfig($name);\n }\n\n /**\n * Get the default connection name.\n *\n * @return string\n * @static\n */\n public static function getDefaultConnection()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getDefaultConnection();\n }\n\n /**\n * Set the default connection name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultConnection($name)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->setDefaultConnection($name);\n }\n\n /**\n * Register an extension connection resolver.\n *\n * @param string $name\n * @param callable $resolver\n * @return void\n * @static\n */\n public static function extend($name, $resolver)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->extend($name, $resolver);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array<string,object>\n * @static\n */\n public static function getConnections()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConnections();\n }\n\n /**\n * Get the config instance.\n *\n * @return \\Illuminate\\Contracts\\Config\\Repository\n * @static\n */\n public static function getConfig()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConfig();\n }\n\n }\n }\n\nnamespace Illuminate\\Support {\n /**\n * @template TKey of array-key\n * @template-covariant TValue\n * @implements \\ArrayAccess<TKey, TValue>\n * @implements \\Illuminate\\Support\\Enumerable<TKey, TValue>\n */\n class Collection {\n /**\n * @see \\Barryvdh\\Debugbar\\ServiceProvider::register()\n * @static\n */\n public static function debug()\n {\n return \\Illuminate\\Support\\Collection::debug();\n }\n\n /**\n * @see \\Spatie\\Fractal\\FractalServiceProvider::packageBooted()\n * @param mixed $transformer\n * @static\n */\n public static function transformWith($transformer)\n {\n return \\Illuminate\\Support\\Collection::transformWith($transformer);\n }\n\n }\n }\n\nnamespace Illuminate\\Http {\n /**\n */\n class Request extends \\Symfony\\Component\\HttpFoundation\\Request {\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validate($rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validate($rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param string $errorBag\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validateWithBag($errorBag, $rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validateWithBag($errorBag, $rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignature($absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignature($absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @static\n */\n public static function hasValidRelativeSignature()\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignature();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignatureWhileIgnoring($ignoreQuery, $absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @static\n */\n public static function hasValidRelativeSignatureWhileIgnoring($ignoreQuery = [])\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignatureWhileIgnoring($ignoreQuery);\n }\n\n }\n }\n\nnamespace Illuminate\\Testing {\n /**\n * @template TResponse of \\Symfony\\Component\\HttpFoundation\\Response\n * @mixin \\Illuminate\\Http\\Response\n */\n class TestResponse {\n /**\n * @see \\JMac\\Testing\\AdditionalAssertionsServiceProvider::register()\n * @param array $structure\n * @static\n */\n public static function assertJsonTypedStructure($structure)\n {\n return \\Illuminate\\Testing\\TestResponse::assertJsonTypedStructure($structure);\n }\n\n /**\n * @see \\JMac\\Testing\\AdditionalAssertionsServiceProvider::register()\n * @param string $key\n * @static\n */\n public static function assertViewHasNull($key)\n {\n return \\Illuminate\\Testing\\TestResponse::assertViewHasNull($key);\n }\n\n }\n }\n\nnamespace Illuminate\\Database\\Schema {\n /**\n */\n class Blueprint {\n /**\n * @see \\Kalnoy\\Nestedset\\NestedSetServiceProvider::register()\n * @static\n */\n public static function nestedSet()\n {\n return \\Illuminate\\Database\\Schema\\Blueprint::nestedSet();\n }\n\n /**\n * @see \\Kalnoy\\Nestedset\\NestedSetServiceProvider::register()\n * @static\n */\n public static function dropNestedSet()\n {\n return \\Illuminate\\Database\\Schema\\Blueprint::dropNestedSet();\n }\n\n }\n }\n\nnamespace Illuminate\\Validation {\n /**\n */\n class Rule {\n /**\n * @see \\Propaganistas\\LaravelPhone\\PhoneServiceProvider::registerValidator()\n * @static\n */\n public static function phone()\n {\n return \\Illuminate\\Validation\\Rule::phone();\n }\n\n }\n }\n\nnamespace Illuminate\\Console\\Scheduling {\n /**\n */\n class Event {\n /**\n * @see \\Sentry\\Laravel\\Features\\ConsoleSchedulingIntegration::register()\n * @param string|null $monitorSlug\n * @param int|null $checkInMargin\n * @param int|null $maxRuntime\n * @param bool $updateMonitorConfig\n * @param int|null $failureIssueThreshold\n * @param int|null $recoveryThreshold\n * @static\n */\n public static function sentryMonitor($monitorSlug = null, $checkInMargin = null, $maxRuntime = null, $updateMonitorConfig = true, $failureIssueThreshold = null, $recoveryThreshold = null)\n {\n return \\Illuminate\\Console\\Scheduling\\Event::sentryMonitor($monitorSlug, $checkInMargin, $maxRuntime, $updateMonitorConfig, $failureIssueThreshold, $recoveryThreshold);\n }\n\n }\n }\n\nnamespace Illuminate\\Http\\Client {\n /**\n * @mixin \\Illuminate\\Http\\Client\\PendingRequest\n */\n class Factory {\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatApi();\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatAnalyticsApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatAnalyticsApi();\n }\n\n }\n }\n\nnamespace Illuminate\\Routing {\n /**\n * @mixin \\Illuminate\\Routing\\RouteRegistrar\n */\n class Router {\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::auth()\n * @param mixed $options\n * @static\n */\n public static function auth($options = [])\n {\n return \\Illuminate\\Routing\\Router::auth($options);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::resetPassword()\n * @static\n */\n public static function resetPassword()\n {\n return \\Illuminate\\Routing\\Router::resetPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::confirmPassword()\n * @static\n */\n public static function confirmPassword()\n {\n return \\Illuminate\\Routing\\Router::confirmPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::emailVerification()\n * @static\n */\n public static function emailVerification()\n {\n return \\Illuminate\\Routing\\Router::emailVerification();\n }\n\n }\n /**\n */\n class ResponseFactory {\n /**\n * @see \\Jiminny\\Providers\\ResponseMacroServiceProvider::boot()\n * @param mixed $data\n * @param mixed $status\n * @param array $headers\n * @param mixed $options\n * @static\n */\n public static function twiml($data = null, $status = 200, $headers = [], $options = 0)\n {\n return \\Illuminate\\Routing\\ResponseFactory::twiml($data, $status, $headers, $options);\n }\n\n }\n }\n\nnamespace Illuminate\\Database\\Eloquent {\n /**\n * @template TKey of array-key\n * @template TModel of \\Illuminate\\Database\\Eloquent\\Model\n * @extends \\Illuminate\\Support\\Collection<TKey, TModel>\n */\n class Collection extends \\Illuminate\\Support\\Collection {\n }\n }\n\n\nnamespace {\n class App extends \\Illuminate\\Support\\Facades\\App {}\n class Arr extends \\Illuminate\\Support\\Arr {}\n class Artisan extends \\Illuminate\\Support\\Facades\\Artisan {}\n class Auth extends \\Illuminate\\Support\\Facades\\Auth {}\n class Benchmark extends \\Illuminate\\Support\\Benchmark {}\n class Blade extends \\Illuminate\\Support\\Facades\\Blade {}\n class Broadcast extends \\Illuminate\\Support\\Facades\\Broadcast {}\n class Bus extends \\Illuminate\\Support\\Facades\\Bus {}\n class Cache extends \\Illuminate\\Support\\Facades\\Cache {}\n class Concurrency extends \\Illuminate\\Support\\Facades\\Concurrency {}\n class Config extends \\Illuminate\\Support\\Facades\\Config {}\n class Context extends \\Illuminate\\Support\\Facades\\Context {}\n class Cookie extends \\Illuminate\\Support\\Facades\\Cookie {}\n class Crypt extends \\Illuminate\\Support\\Facades\\Crypt {}\n class DB extends \\Illuminate\\Support\\Facades\\DB {}\n\n /**\n * @template TCollection of static\n * @template TModel of static\n * @template TValue of static\n * @template TValue of static\n */\n class Eloquent extends \\Illuminate\\Database\\Eloquent\\Model { /**\n * Create and return an un-saved model instance.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function make($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->make($attributes);\n }\n\n /**\n * Register a new global scope.\n *\n * @param string $identifier\n * @param \\Illuminate\\Database\\Eloquent\\Scope|\\Closure $scope\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withGlobalScope($identifier, $scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withGlobalScope($identifier, $scope);\n }\n\n /**\n * Remove a registered global scope.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Scope|string $scope\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScope($scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScope($scope);\n }\n\n /**\n * Remove all or passed registered global scopes.\n *\n * @param array|null $scopes\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScopes($scopes = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScopes($scopes);\n }\n\n /**\n * Remove all global scopes except the given scopes.\n *\n * @param array $scopes\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScopesExcept($scopes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScopesExcept($scopes);\n }\n\n /**\n * Get an array of global scopes that were removed from the query.\n *\n * @return array\n * @static\n */\n public static function removedScopes()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->removedScopes();\n }\n\n /**\n * Add a where clause on the primary key to the query.\n *\n * @param mixed $id\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereKey($id)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereKey($id);\n }\n\n /**\n * Add a where clause on the primary key to the query.\n *\n * @param mixed $id\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereKeyNot($id)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereKeyNot($id);\n }\n\n /**\n * Add a basic where clause to the query.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function where($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->where($column, $operator, $value, $boolean);\n }\n\n /**\n * Add a basic where clause to the query, and return the first result.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return TModel|null\n * @static\n */\n public static function firstWhere($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstWhere($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|array|string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhere($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhere($column, $operator, $value);\n }\n\n /**\n * Add a basic \"where not\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNot($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereNot($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where not\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|array|string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNot($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereNot($column, $operator, $value);\n }\n\n /**\n * Add an \"order by\" clause for a timestamp to the query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function latest($column = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->latest($column);\n }\n\n /**\n * Add an \"order by\" clause for a timestamp to the query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function oldest($column = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->oldest($column);\n }\n\n /**\n * Create a collection of models from plain arrays.\n *\n * @param array $items\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function hydrate($items)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hydrate($items);\n }\n\n /**\n * Insert into the database after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return bool\n * @static\n */\n public static function fillAndInsert($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsert($values);\n }\n\n /**\n * Insert (ignoring errors) into the database after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return int\n * @static\n */\n public static function fillAndInsertOrIgnore($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsertOrIgnore($values);\n }\n\n /**\n * Insert a record into the database and get its ID after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<string, mixed> $values\n * @return int\n * @static\n */\n public static function fillAndInsertGetId($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsertGetId($values);\n }\n\n /**\n * Enrich the given values by merging in the model's default attributes, adding timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return array<int, array<string, mixed>>\n * @static\n */\n public static function fillForInsert($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillForInsert($values);\n }\n\n /**\n * Create a collection of models from a raw query.\n *\n * @param string $query\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function fromQuery($query, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fromQuery($query, $bindings);\n }\n\n /**\n * Find a model by its primary key.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel|null)\n * @static\n */\n public static function find($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->find($id, $columns);\n }\n\n /**\n * Find a sole model by its primary key.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function findSole($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findSole($id, $columns);\n }\n\n /**\n * Find multiple models by their primary keys.\n *\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $ids\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function findMany($ids, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findMany($ids, $columns);\n }\n\n /**\n * Find a model by its primary key or throw an exception.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel)\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function findOrFail($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOrFail($id, $columns);\n }\n\n /**\n * Find a model by its primary key or return fresh model instance.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel)\n * @static\n */\n public static function findOrNew($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOrNew($id, $columns);\n }\n\n /**\n * Find a model by its primary key or call a callback.\n *\n * @template TValue\n * @param mixed $id\n * @param (\\Closure(): TValue)|list<string>|string $columns\n * @param (\\Closure(): TValue)|null $callback\n * @return ( $id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>)\n * ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * : TModel|TValue\n * )\n * @static\n */\n public static function findOr($id, $columns = [], $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOr($id, $columns, $callback);\n }\n\n /**\n * Get the first record matching the attributes or instantiate it.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function firstOrNew($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrNew($attributes, $values);\n }\n\n /**\n * Get the first record matching the attributes. If the record is not found, create it.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function firstOrCreate($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrCreate($attributes, $values);\n }\n\n /**\n * Attempt to create the record. If a unique constraint violation occurs, attempt to find the matching record.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function createOrFirst($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->createOrFirst($attributes, $values);\n }\n\n /**\n * Create or update a record matching the attributes, and fill it with values.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function updateOrCreate($attributes, $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->updateOrCreate($attributes, $values);\n }\n\n /**\n * Create a record matching the attributes, or increment the existing record.\n *\n * @param array $attributes\n * @param string $column\n * @param int|float $default\n * @param int|float $step\n * @param array $extra\n * @return TModel\n * @static\n */\n public static function incrementOrCreate($attributes, $column = 'count', $default = 1, $step = 1, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->incrementOrCreate($attributes, $column, $default, $step, $extra);\n }\n\n /**\n * Execute the query and get the first result or throw an exception.\n *\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function firstOrFail($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrFail($columns);\n }\n\n /**\n * Execute the query and get the first result or call a callback.\n *\n * @template TValue\n * @param (\\Closure(): TValue)|list<string> $columns\n * @param (\\Closure(): TValue)|null $callback\n * @return TModel|TValue\n * @static\n */\n public static function firstOr($columns = [], $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOr($columns, $callback);\n }\n\n /**\n * Execute the query and get the first result if it's the sole matching record.\n *\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function sole($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->sole($columns);\n }\n\n /**\n * Get a single column's value from the first result of a query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @static\n */\n public static function value($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->value($column);\n }\n\n /**\n * Get a single column's value from the first result of a query if it's the sole matching record.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function soleValue($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->soleValue($column);\n }\n\n /**\n * Get a single column's value from the first result of the query or throw an exception.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function valueOrFail($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->valueOrFail($column);\n }\n\n /**\n * Execute the query as a \"select\" statement.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function get($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->get($columns);\n }\n\n /**\n * Get the hydrated models without eager loading.\n *\n * @param array|string $columns\n * @return array<int, TModel>\n * @static\n */\n public static function getModels($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getModels($columns);\n }\n\n /**\n * Eager load the relationships for the models.\n *\n * @param array<int, TModel> $models\n * @return array<int, TModel>\n * @static\n */\n public static function eagerLoadRelations($models)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->eagerLoadRelations($models);\n }\n\n /**\n * Register a closure to be invoked after the query is executed.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function afterQuery($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->afterQuery($callback);\n }\n\n /**\n * Invoke the \"after query\" modification callbacks.\n *\n * @param mixed $result\n * @return mixed\n * @static\n */\n public static function applyAfterQueryCallbacks($result)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->applyAfterQueryCallbacks($result);\n }\n\n /**\n * Get a lazy collection for the given query.\n *\n * @return \\Illuminate\\Support\\LazyCollection<int, TModel>\n * @static\n */\n public static function cursor()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->cursor();\n }\n\n /**\n * Get a collection with the values of a given column.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param string|null $key\n * @return \\Illuminate\\Support\\Collection<array-key, mixed>\n * @static\n */\n public static function pluck($column, $key = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->pluck($column, $key);\n }\n\n /**\n * Paginate the given query.\n *\n * @param int|null|\\Closure $perPage\n * @param array|string $columns\n * @param string $pageName\n * @param int|null $page\n * @param \\Closure|int|null $total\n * @return \\Illuminate\\Pagination\\LengthAwarePaginator\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function paginate($perPage = null, $columns = [], $pageName = 'page', $page = null, $total = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->paginate($perPage, $columns, $pageName, $page, $total);\n }\n\n /**\n * Paginate the given query into a simple paginator.\n *\n * @param int|null $perPage\n * @param array|string $columns\n * @param string $pageName\n * @param int|null $page\n * @return \\Illuminate\\Contracts\\Pagination\\Paginator\n * @static\n */\n public static function simplePaginate($perPage = null, $columns = [], $pageName = 'page', $page = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->simplePaginate($perPage, $columns, $pageName, $page);\n }\n\n /**\n * Paginate the given query into a cursor paginator.\n *\n * @param int|null $perPage\n * @param array|string $columns\n * @param string $cursorName\n * @param \\Illuminate\\Pagination\\Cursor|string|null $cursor\n * @return \\Illuminate\\Contracts\\Pagination\\CursorPaginator\n * @static\n */\n public static function cursorPaginate($perPage = null, $columns = [], $cursorName = 'cursor', $cursor = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->cursorPaginate($perPage, $columns, $cursorName, $cursor);\n }\n\n /**\n * Save a new model and return the instance.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function create($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->create($attributes);\n }\n\n /**\n * Save a new model and return the instance without raising model events.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function createQuietly($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->createQuietly($attributes);\n }\n\n /**\n * Save a new model and return the instance. Allow mass-assignment.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function forceCreate($attributes)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->forceCreate($attributes);\n }\n\n /**\n * Save a new model instance with mass assignment without raising model events.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function forceCreateQuietly($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->forceCreateQuietly($attributes);\n }\n\n /**\n * Insert new records or update the existing ones.\n *\n * @param array $values\n * @param array|string $uniqueBy\n * @param array|null $update\n * @return int\n * @static\n */\n public static function upsert($values, $uniqueBy, $update = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->upsert($values, $uniqueBy, $update);\n }\n\n /**\n * Register a replacement for the default delete function.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function onDelete($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n $instance->onDelete($callback);\n }\n\n /**\n * Call the given local model scopes.\n *\n * @param array|string $scopes\n * @return static|mixed\n * @static\n */\n public static function scopes($scopes)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->scopes($scopes);\n }\n\n /**\n * Apply the scopes to the Eloquent builder instance and return it.\n *\n * @return static\n * @static\n */\n public static function applyScopes()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->applyScopes();\n }\n\n /**\n * Prevent the specified relations from being eager loaded.\n *\n * @param mixed $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function without($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->without($relations);\n }\n\n /**\n * Set the relationships that should be eager loaded while removing any previously added eager loading specifications.\n *\n * @param array<array-key, array|(\\Closure(\\Illuminate\\Database\\Eloquent\\Relations\\Relation<*,*,*>): mixed)|string>|string $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withOnly($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withOnly($relations);\n }\n\n /**\n * Create a new instance of the model being queried.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function newModelInstance($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->newModelInstance($attributes);\n }\n\n /**\n * Specify attributes that should be added to any new models created by this builder.\n * \n * The given key / value pairs will also be added as where conditions to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|array|string $attributes\n * @param mixed $value\n * @param bool $asConditions\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAttributes($attributes, $value = null, $asConditions = true)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAttributes($attributes, $value, $asConditions);\n }\n\n /**\n * Apply query-time casts to the model instance.\n *\n * @param array $casts\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withCasts($casts)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withCasts($casts);\n }\n\n /**\n * Execute the given Closure within a transaction savepoint if needed.\n *\n * @template TModelValue\n * @param \\Closure(): TModelValue $scope\n * @return TModelValue\n * @static\n */\n public static function withSavepointIfNeeded($scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withSavepointIfNeeded($scope);\n }\n\n /**\n * Get the underlying query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function getQuery()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getQuery();\n }\n\n /**\n * Set the underlying query builder instance.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function setQuery($query)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setQuery($query);\n }\n\n /**\n * Get a base query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function toBase()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->toBase();\n }\n\n /**\n * Get the relationships being eagerly loaded.\n *\n * @return array\n * @static\n */\n public static function getEagerLoads()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getEagerLoads();\n }\n\n /**\n * Set the relationships being eagerly loaded.\n *\n * @param array $eagerLoad\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function setEagerLoads($eagerLoad)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setEagerLoads($eagerLoad);\n }\n\n /**\n * Indicate that the given relationships should not be eagerly loaded.\n *\n * @param array $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutEagerLoad($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutEagerLoad($relations);\n }\n\n /**\n * Flush the relationships being eagerly loaded.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutEagerLoads()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutEagerLoads();\n }\n\n /**\n * Get the \"limit\" value from the query or null if it's not set.\n *\n * @return mixed\n * @static\n */\n public static function getLimit()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getLimit();\n }\n\n /**\n * Get the \"offset\" value from the query or null if it's not set.\n *\n * @return mixed\n * @static\n */\n public static function getOffset()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getOffset();\n }\n\n /**\n * Get the model instance being queried.\n *\n * @return TModel\n * @static\n */\n public static function getModel()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getModel();\n }\n\n /**\n * Set a model instance for the model being queried.\n *\n * @template TModelNew of \\Illuminate\\Database\\Eloquent\\Model\n * @param TModelNew $model\n * @return static<TModelNew>\n * @static\n */\n public static function setModel($model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setModel($model);\n }\n\n /**\n * Get the given macro by name.\n *\n * @param string $name\n * @return \\Closure\n * @static\n */\n public static function getMacro($name)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getMacro($name);\n }\n\n /**\n * Checks if a macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hasMacro($name);\n }\n\n /**\n * Get the given global macro by name.\n *\n * @param string $name\n * @return \\Closure\n * @static\n */\n public static function getGlobalMacro($name)\n {\n return \\Illuminate\\Database\\Eloquent\\Builder::getGlobalMacro($name);\n }\n\n /**\n * Checks if a global macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasGlobalMacro($name)\n {\n return \\Illuminate\\Database\\Eloquent\\Builder::hasGlobalMacro($name);\n }\n\n /**\n * Clone the Eloquent query builder.\n *\n * @return static\n * @static\n */\n public static function clone()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->clone();\n }\n\n /**\n * Register a closure to be invoked on a clone.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function onClone($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->onClone($callback);\n }\n\n /**\n * Chunk the results of the query.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @return bool\n * @static\n */\n public static function chunk($count, $callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunk($count, $callback);\n }\n\n /**\n * Run a map over each item while chunking.\n *\n * @template TReturn\n * @param callable(TValue): TReturn $callback\n * @param int $count\n * @return \\Illuminate\\Support\\Collection<int, TReturn>\n * @static\n */\n public static function chunkMap($callback, $count = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkMap($callback, $count);\n }\n\n /**\n * Execute a callback over each item while chunking.\n *\n * @param callable(TValue, int): mixed $callback\n * @param int $count\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function each($callback, $count = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->each($callback, $count);\n }\n\n /**\n * Chunk the results of a query by comparing IDs.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function chunkById($count, $callback, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkById($count, $callback, $column, $alias);\n }\n\n /**\n * Chunk the results of a query by comparing IDs in descending order.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function chunkByIdDesc($count, $callback, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkByIdDesc($count, $callback, $column, $alias);\n }\n\n /**\n * Chunk the results of a query by comparing IDs in a given order.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @param bool $descending\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function orderedChunkById($count, $callback, $column = null, $alias = null, $descending = false)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orderedChunkById($count, $callback, $column, $alias, $descending);\n }\n\n /**\n * Execute a callback over each item while chunking by ID.\n *\n * @param callable(TValue, int): mixed $callback\n * @param int $count\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function eachById($callback, $count = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->eachById($callback, $count, $column, $alias);\n }\n\n /**\n * Query lazily, by chunks of the given size.\n *\n * @param int $chunkSize\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazy($chunkSize = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazy($chunkSize);\n }\n\n /**\n * Query lazily, by chunking the results of a query by comparing IDs.\n *\n * @param int $chunkSize\n * @param string|null $column\n * @param string|null $alias\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazyById($chunkSize = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazyById($chunkSize, $column, $alias);\n }\n\n /**\n * Query lazily, by chunking the results of a query by comparing IDs in descending order.\n *\n * @param int $chunkSize\n * @param string|null $column\n * @param string|null $alias\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazyByIdDesc($chunkSize = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazyByIdDesc($chunkSize, $column, $alias);\n }\n\n /**\n * Execute the query and get the first result.\n *\n * @param array|string $columns\n * @return TValue|null\n * @static\n */\n public static function first($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->first($columns);\n }\n\n /**\n * Execute the query and get the first result if it's the sole matching record.\n *\n * @param array|string $columns\n * @return TValue\n * @throws \\Illuminate\\Database\\RecordsNotFoundException\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function baseSole($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->baseSole($columns);\n }\n\n /**\n * Pass the query to a given callback and then return it.\n *\n * @param callable($this): mixed $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function tap($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->tap($callback);\n }\n\n /**\n * Pass the query to a given callback and return the result.\n *\n * @template TReturn\n * @param (callable($this): TReturn) $callback\n * @return (TReturn is null|void ? $this : TReturn)\n * @static\n */\n public static function pipe($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->pipe($callback);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Add a relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param string $operator\n * @param int $count\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function has($relation, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->has($relation, $operator, $count, $boolean, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHas($relation, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orHas($relation, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function doesntHave($relation, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->doesntHave($relation, $boolean, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orDoesntHave($relation)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orDoesntHave($relation);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n * \n * Also load the relationship with the same condition.\n *\n * @param string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withWhereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withWhereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHave($relation, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHave($relation, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHave($relation, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHave($relation, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $operator\n * @param int $count\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function hasMorph($relation, $types, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hasMorph($relation, $types, $operator, $count, $boolean, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHasMorph($relation, $types, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orHasMorph($relation, $types, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function doesntHaveMorph($relation, $types, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->doesntHaveMorph($relation, $types, $boolean, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param string|array<int, string> $types\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orDoesntHaveMorph($relation, $types)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orDoesntHaveMorph($relation, $types);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereHasMorph($relation, $types, $callback, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereHasMorph($relation, $types, $callback, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHaveMorph($relation, $types, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHaveMorph($relation, $types, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHaveMorph($relation, $types, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHaveMorph($relation, $types, $callback);\n }\n\n /**\n * Add a basic where clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a basic where clause to a relationship query and eager-load the relationship with the same conditions.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @param \\Closure|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withWhereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withWhereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add an \"or where\" clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a basic count / exists condition to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHaveRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHaveRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add an \"or where\" clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHaveRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHaveRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with a where clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with an \"or where\" clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with a doesn't have clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphDoesntHaveRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphDoesntHaveRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with an \"or doesn't have\" clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphDoesntHaveRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphDoesntHaveRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a morph-to relationship condition to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string|null $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphedTo($relation, $model, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphedTo($relation, $model, $boolean);\n }\n\n /**\n * Add a not morph-to relationship condition to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotMorphedTo($relation, $model, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereNotMorphedTo($relation, $model, $boolean);\n }\n\n /**\n * Add a morph-to relationship condition to the query with an \"or where\" clause.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string|null $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphedTo($relation, $model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphedTo($relation, $model);\n }\n\n /**\n * Add a not morph-to relationship condition to the query with an \"or where\" clause.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotMorphedTo($relation, $model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereNotMorphedTo($relation, $model);\n }\n\n /**\n * Add a \"belongs to\" relationship where clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model|\\Illuminate\\Database\\Eloquent\\Collection<int, \\Illuminate\\Database\\Eloquent\\Model> $related\n * @param string|null $relationshipName\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\Illuminate\\Database\\Eloquent\\RelationNotFoundException\n * @static\n */\n public static function whereBelongsTo($related, $relationshipName = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereBelongsTo($related, $relationshipName, $boolean);\n }\n\n /**\n * Add a \"BelongsTo\" relationship with an \"or where\" clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model $related\n * @param string|null $relationshipName\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function orWhereBelongsTo($related, $relationshipName = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereBelongsTo($related, $relationshipName);\n }\n\n /**\n * Add a \"belongs to many\" relationship where clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model|\\Illuminate\\Database\\Eloquent\\Collection<int, \\Illuminate\\Database\\Eloquent\\Model> $related\n * @param string|null $relationshipName\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\Illuminate\\Database\\Eloquent\\RelationNotFoundException\n * @static\n */\n public static function whereAttachedTo($related, $relationshipName = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereAttachedTo($related, $relationshipName, $boolean);\n }\n\n /**\n * Add a \"belongs to many\" relationship with an \"or where\" clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model $related\n * @param string|null $relationshipName\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function orWhereAttachedTo($related, $relationshipName = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereAttachedTo($related, $relationshipName);\n }\n\n /**\n * Add subselect queries to include an aggregate value for a relationship.\n *\n * @param mixed $relations\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string|null $function\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAggregate($relations, $column, $function = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAggregate($relations, $column, $function);\n }\n\n /**\n * Add subselect queries to count the relations.\n *\n * @param mixed $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withCount($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withCount($relations);\n }\n\n /**\n * Add subselect queries to include the max of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withMax($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withMax($relation, $column);\n }\n\n /**\n * Add subselect queries to include the min of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withMin($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withMin($relation, $column);\n }\n\n /**\n * Add subselect queries to include the sum of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withSum($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withSum($relation, $column);\n }\n\n /**\n * Add subselect queries to include the average of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAvg($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAvg($relation, $column);\n }\n\n /**\n * Add subselect queries to include the existence of related models.\n *\n * @param string|array $relation\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withExists($relation)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withExists($relation);\n }\n\n /**\n * Merge the where constraints from another query to the current query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Builder<*> $from\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeConstraintsFrom($from)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->mergeConstraintsFrom($from);\n }\n\n /**\n * Set the columns to be selected.\n *\n * @param mixed $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function select($columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->select($columns);\n }\n\n /**\n * Add a subselect expression to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function selectSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->selectSub($query, $as);\n }\n\n /**\n * Add a new \"raw\" select expression to the query.\n *\n * @param string $expression\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function selectRaw($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->selectRaw($expression, $bindings);\n }\n\n /**\n * Makes \"from\" fetch from a subquery.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function fromSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->fromSub($query, $as);\n }\n\n /**\n * Add a raw from clause to the query.\n *\n * @param string $expression\n * @param mixed $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function fromRaw($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->fromRaw($expression, $bindings);\n }\n\n /**\n * Add a new select column to the query.\n *\n * @param mixed $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addSelect($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addSelect($column);\n }\n\n /**\n * Force the query to only return distinct results.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function distinct()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->distinct();\n }\n\n /**\n * Set the table which the query is targeting.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param string|null $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function from($table, $as = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->from($table, $as);\n }\n\n /**\n * Add an index hint to suggest a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function useIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->useIndex($index);\n }\n\n /**\n * Add an index hint to force a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forceIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forceIndex($index);\n }\n\n /**\n * Add an index hint to ignore a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function ignoreIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->ignoreIndex($index);\n }\n\n /**\n * Add a join clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @param string $type\n * @param bool $where\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->join($table, $first, $operator, $second, $type, $where);\n }\n\n /**\n * Add a \"join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $second\n * @param string $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function joinWhere($table, $first, $operator, $second, $type = 'inner')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinWhere($table, $first, $operator, $second, $type);\n }\n\n /**\n * Add a subquery join clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @param string $type\n * @param bool $where\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function joinSub($query, $as, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinSub($query, $as, $first, $operator, $second, $type, $where);\n }\n\n /**\n * Add a lateral join clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function joinLateral($query, $as, $type = 'inner')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinLateral($query, $as, $type);\n }\n\n /**\n * Add a lateral left join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinLateral($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinLateral($query, $as);\n }\n\n /**\n * Add a left join to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoin($table, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a \"join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinWhere($table, $first, $operator, $second)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinWhere($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery left join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinSub($query, $as, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinSub($query, $as, $first, $operator, $second);\n }\n\n /**\n * Add a right join to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoin($table, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a \"right join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoinWhere($table, $first, $operator, $second)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoinWhere($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery right join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoinSub($query, $as, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoinSub($query, $as, $first, $operator, $second);\n }\n\n /**\n * Add a \"cross join\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function crossJoin($table, $first = null, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->crossJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery cross join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function crossJoinSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->crossJoinSub($query, $as);\n }\n\n /**\n * Merge an array of where clauses and bindings.\n *\n * @param array $wheres\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeWheres($wheres, $bindings)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->mergeWheres($wheres, $bindings);\n }\n\n /**\n * Prepare the value and operator for a where clause.\n *\n * @param string $value\n * @param string $operator\n * @param bool $useDefault\n * @return array\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function prepareValueAndOperator($value, $operator, $useDefault = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->prepareValueAndOperator($value, $operator, $useDefault);\n }\n\n /**\n * Add a \"where\" clause comparing two columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|array $first\n * @param string|null $operator\n * @param string|null $second\n * @param string|null $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereColumn($first, $operator = null, $second = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereColumn($first, $operator, $second, $boolean);\n }\n\n /**\n * Add an \"or where\" clause comparing two columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|array $first\n * @param string|null $operator\n * @param string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereColumn($first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereColumn($first, $operator, $second);\n }\n\n /**\n * Add a raw where clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $sql\n * @param mixed $bindings\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereRaw($sql, $bindings = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereRaw($sql, $bindings, $boolean);\n }\n\n /**\n * Add a raw or where clause to the query.\n *\n * @param string $sql\n * @param mixed $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereRaw($sql, $bindings);\n }\n\n /**\n * Add a \"where like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereLike($column, $value, $caseSensitive = false, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereLike($column, $value, $caseSensitive, $boolean, $not);\n }\n\n /**\n * Add an \"or where like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereLike($column, $value, $caseSensitive = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereLike($column, $value, $caseSensitive);\n }\n\n /**\n * Add a \"where not like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotLike($column, $value, $caseSensitive = false, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotLike($column, $value, $caseSensitive, $boolean);\n }\n\n /**\n * Add an \"or where not like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotLike($column, $value, $caseSensitive = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotLike($column, $value, $caseSensitive);\n }\n\n /**\n * Add a \"where in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIn($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIn($column, $values, $boolean, $not);\n }\n\n /**\n * Add an \"or where in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIn($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIn($column, $values);\n }\n\n /**\n * Add a \"where not in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotIn($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotIn($column, $values, $boolean);\n }\n\n /**\n * Add an \"or where not in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotIn($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotIn($column, $values);\n }\n\n /**\n * Add a \"where in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIntegerInRaw($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIntegerInRaw($column, $values, $boolean, $not);\n }\n\n /**\n * Add an \"or where in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIntegerInRaw($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIntegerInRaw($column, $values);\n }\n\n /**\n * Add a \"where not in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIntegerNotInRaw($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIntegerNotInRaw($column, $values, $boolean);\n }\n\n /**\n * Add an \"or where not in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIntegerNotInRaw($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIntegerNotInRaw($column, $values);\n }\n\n /**\n * Add a \"where null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNull($columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNull($columns, $boolean, $not);\n }\n\n /**\n * Add an \"or where null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNull($column);\n }\n\n /**\n * Add a \"where not null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotNull($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotNull($columns, $boolean);\n }\n\n /**\n * Add a where between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBetween($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBetween($column, $values, $boolean, $not);\n }\n\n /**\n * Add a where between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBetweenColumns($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBetweenColumns($column, $values, $boolean, $not);\n }\n\n /**\n * Add an or where between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBetween($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBetween($column, $values);\n }\n\n /**\n * Add an or where between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBetweenColumns($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBetweenColumns($column, $values);\n }\n\n /**\n * Add a where not between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotBetween($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotBetween($column, $values, $boolean);\n }\n\n /**\n * Add a where not between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotBetweenColumns($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotBetweenColumns($column, $values, $boolean);\n }\n\n /**\n * Add an or where not between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotBetween($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotBetween($column, $values);\n }\n\n /**\n * Add an or where not between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotBetweenColumns($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotBetweenColumns($column, $values);\n }\n\n /**\n * Add a where between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereValueBetween($value, $columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereValueBetween($value, $columns, $boolean, $not);\n }\n\n /**\n * Add an or where between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereValueBetween($value, $columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereValueBetween($value, $columns);\n }\n\n /**\n * Add a where not between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereValueNotBetween($value, $columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereValueNotBetween($value, $columns, $boolean);\n }\n\n /**\n * Add an or where not between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereValueNotBetween($value, $columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereValueNotBetween($value, $columns);\n }\n\n /**\n * Add an \"or where not null\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotNull($column);\n }\n\n /**\n * Add a \"where date\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDate($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereDate($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where date\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDate($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereDate($column, $operator, $value);\n }\n\n /**\n * Add a \"where time\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTime($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTime($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where time\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTime($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTime($column, $operator, $value);\n }\n\n /**\n * Add a \"where day\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDay($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereDay($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where day\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDay($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereDay($column, $operator, $value);\n }\n\n /**\n * Add a \"where month\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMonth($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereMonth($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where month\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMonth($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereMonth($column, $operator, $value);\n }\n\n /**\n * Add a \"where year\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereYear($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereYear($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where year\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereYear($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereYear($column, $operator, $value);\n }\n\n /**\n * Add a nested where statement to the query.\n *\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNested($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNested($callback, $boolean);\n }\n\n /**\n * Create a new query instance for nested where condition.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function forNestedWhere()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forNestedWhere();\n }\n\n /**\n * Add another query builder as a nested where to the query builder.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addNestedWhereQuery($query, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addNestedWhereQuery($query, $boolean);\n }\n\n /**\n * Add an exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereExists($callback, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereExists($callback, $boolean, $not);\n }\n\n /**\n * Add an or exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereExists($callback, $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereExists($callback, $not);\n }\n\n /**\n * Add a where not exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotExists($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotExists($callback, $boolean);\n }\n\n /**\n * Add a where not exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotExists($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotExists($callback);\n }\n\n /**\n * Add an exists clause to the query.\n *\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addWhereExistsQuery($query, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addWhereExistsQuery($query, $boolean, $not);\n }\n\n /**\n * Adds a where condition using row values.\n *\n * @param array $columns\n * @param string $operator\n * @param array $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function whereRowValues($columns, $operator, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereRowValues($columns, $operator, $values, $boolean);\n }\n\n /**\n * Adds an or where condition using row values.\n *\n * @param array $columns\n * @param string $operator\n * @param array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRowValues($columns, $operator, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereRowValues($columns, $operator, $values);\n }\n\n /**\n * Add a \"where JSON contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonContains($column, $value, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonContains($column, $value, $boolean, $not);\n }\n\n /**\n * Add an \"or where JSON contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonContains($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonContains($column, $value);\n }\n\n /**\n * Add a \"where JSON not contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntContain($column, $value, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntContain($column, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON not contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntContain($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntContain($column, $value);\n }\n\n /**\n * Add a \"where JSON overlaps\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonOverlaps($column, $value, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonOverlaps($column, $value, $boolean, $not);\n }\n\n /**\n * Add an \"or where JSON overlaps\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonOverlaps($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonOverlaps($column, $value);\n }\n\n /**\n * Add a \"where JSON not overlap\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntOverlap($column, $value, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntOverlap($column, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON not overlap\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntOverlap($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntOverlap($column, $value);\n }\n\n /**\n * Add a clause that determines if a JSON path exists to the query.\n *\n * @param string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonContainsKey($column, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonContainsKey($column, $boolean, $not);\n }\n\n /**\n * Add an \"or\" clause that determines if a JSON path exists to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonContainsKey($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonContainsKey($column);\n }\n\n /**\n * Add a clause that determines if a JSON path does not exist to the query.\n *\n * @param string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntContainKey($column, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntContainKey($column, $boolean);\n }\n\n /**\n * Add an \"or\" clause that determines if a JSON path does not exist to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntContainKey($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntContainKey($column);\n }\n\n /**\n * Add a \"where JSON length\" clause to the query.\n *\n * @param string $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonLength($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonLength($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON length\" clause to the query.\n *\n * @param string $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonLength($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonLength($column, $operator, $value);\n }\n\n /**\n * Handles dynamic \"where\" clauses to the query.\n *\n * @param string $method\n * @param array $parameters\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dynamicWhere($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dynamicWhere($method, $parameters);\n }\n\n /**\n * Add a \"where fulltext\" clause to the query.\n *\n * @param string|string[] $columns\n * @param string $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereFullText($columns, $value, $options = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereFullText($columns, $value, $options, $boolean);\n }\n\n /**\n * Add a \"or where fulltext\" clause to the query.\n *\n * @param string|string[] $columns\n * @param string $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereFullText($columns, $value, $options = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereFullText($columns, $value, $options);\n }\n\n /**\n * Add a \"where\" clause to the query for multiple columns with \"and\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAll($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAll($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query for multiple columns with \"and\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAll($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAll($columns, $operator, $value);\n }\n\n /**\n * Add a \"where\" clause to the query for multiple columns with \"or\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAny($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAny($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query for multiple columns with \"or\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAny($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAny($columns, $operator, $value);\n }\n\n /**\n * Add a \"where not\" clause to the query for multiple columns where none of the conditions should be true.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNone($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNone($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where not\" clause to the query for multiple columns where none of the conditions should be true.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNone($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNone($columns, $operator, $value);\n }\n\n /**\n * Add a \"group by\" clause to the query.\n *\n * @param array|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $groups\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupBy(...$groups)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupBy(...$groups);\n }\n\n /**\n * Add a raw groupBy clause to the query.\n *\n * @param string $sql\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupByRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupByRaw($sql, $bindings);\n }\n\n /**\n * Add a \"having\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\Closure|string $column\n * @param \\DateTimeInterface|string|int|float|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\DateTimeInterface|string|int|float|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function having($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->having($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or having\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\Closure|string $column\n * @param \\DateTimeInterface|string|int|float|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\DateTimeInterface|string|int|float|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHaving($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHaving($column, $operator, $value);\n }\n\n /**\n * Add a nested having statement to the query.\n *\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNested($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNested($callback, $boolean);\n }\n\n /**\n * Add another query builder as a nested having to the query builder.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addNestedHavingQuery($query, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addNestedHavingQuery($query, $boolean);\n }\n\n /**\n * Add a \"having null\" clause to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNull($columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNull($columns, $boolean, $not);\n }\n\n /**\n * Add an \"or having null\" clause to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingNull($column);\n }\n\n /**\n * Add a \"having not null\" clause to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNotNull($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNotNull($columns, $boolean);\n }\n\n /**\n * Add an \"or having not null\" clause to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingNotNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingNotNull($column);\n }\n\n /**\n * Add a \"having between \" clause to the query.\n *\n * @param string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingBetween($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingBetween($column, $values, $boolean, $not);\n }\n\n /**\n * Add a raw having clause to the query.\n *\n * @param string $sql\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingRaw($sql, $bindings = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingRaw($sql, $bindings, $boolean);\n }\n\n /**\n * Add a raw or having clause to the query.\n *\n * @param string $sql\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingRaw($sql, $bindings);\n }\n\n /**\n * Add an \"order by\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $direction\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function orderBy($column, $direction = 'asc')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderBy($column, $direction);\n }\n\n /**\n * Add a descending \"order by\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orderByDesc($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderByDesc($column);\n }\n\n /**\n * Put the query's results in random order.\n *\n * @param string|int $seed\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function inRandomOrder($seed = '')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->inRandomOrder($seed);\n }\n\n /**\n * Add a raw \"order by\" clause to the query.\n *\n * @param string $sql\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orderByRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderByRaw($sql, $bindings);\n }\n\n /**\n * Alias to set the \"offset\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function skip($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->skip($value);\n }\n\n /**\n * Set the \"offset\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function offset($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->offset($value);\n }\n\n /**\n * Alias to set the \"limit\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function take($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->take($value);\n }\n\n /**\n * Set the \"limit\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function limit($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->limit($value);\n }\n\n /**\n * Add a \"group limit\" clause to the query.\n *\n * @param int $value\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupLimit($value, $column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupLimit($value, $column);\n }\n\n /**\n * Set the limit and offset for a given page.\n *\n * @param int $page\n * @param int $perPage\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPage($page, $perPage = 15)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPage($page, $perPage);\n }\n\n /**\n * Constrain the query to the previous \"page\" of results before a given ID.\n *\n * @param int $perPage\n * @param int|null $lastId\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPageBeforeId($perPage = 15, $lastId = 0, $column = 'id')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPageBeforeId($perPage, $lastId, $column);\n }\n\n /**\n * Constrain the query to the next \"page\" of results after a given ID.\n *\n * @param int $perPage\n * @param int|null $lastId\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPageAfterId($perPage = 15, $lastId = 0, $column = 'id')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPageAfterId($perPage, $lastId, $column);\n }\n\n /**\n * Remove all existing orders and optionally add a new order.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $column\n * @param string $direction\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function reorder($column = null, $direction = 'asc')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->reorder($column, $direction);\n }\n\n /**\n * Add descending \"reorder\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function reorderDesc($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->reorderDesc($column);\n }\n\n /**\n * Add a union statement to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $query\n * @param bool $all\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function union($query, $all = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->union($query, $all);\n }\n\n /**\n * Add a union all statement to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function unionAll($query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->unionAll($query);\n }\n\n /**\n * Lock the selected rows in the table.\n *\n * @param string|bool $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function lock($value = true)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->lock($value);\n }\n\n /**\n * Lock the selected rows in the table for updating.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function lockForUpdate()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->lockForUpdate();\n }\n\n /**\n * Share lock the selected rows in the table.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function sharedLock()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->sharedLock();\n }\n\n /**\n * Register a closure to be invoked before the query is executed.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function beforeQuery($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->beforeQuery($callback);\n }\n\n /**\n * Invoke the \"before query\" modification callbacks.\n *\n * @return void\n * @static\n */\n public static function applyBeforeQueryCallbacks()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n $instance->applyBeforeQueryCallbacks();\n }\n\n /**\n * Get the SQL representation of the query.\n *\n * @return string\n * @static\n */\n public static function toSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->toSql();\n }\n\n /**\n * Get the raw SQL representation of the query with embedded bindings.\n *\n * @return string\n * @static\n */\n public static function toRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->toRawSql();\n }\n\n /**\n * Get a single expression value from the first result of a query.\n *\n * @return mixed\n * @static\n */\n public static function rawValue($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rawValue($expression, $bindings);\n }\n\n /**\n * Get the count of the total records for the paginator.\n *\n * @param array<string|\\Illuminate\\Contracts\\Database\\Query\\Expression> $columns\n * @return int<0, max>\n * @static\n */\n public static function getCountForPagination($columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getCountForPagination($columns);\n }\n\n /**\n * Concatenate values of a given column as a string.\n *\n * @param string $column\n * @param string $glue\n * @return string\n * @static\n */\n public static function implode($column, $glue = '')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->implode($column, $glue);\n }\n\n /**\n * Determine if any rows exist for the current query.\n *\n * @return bool\n * @static\n */\n public static function exists()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->exists();\n }\n\n /**\n * Determine if no rows exist for the current query.\n *\n * @return bool\n * @static\n */\n public static function doesntExist()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->doesntExist();\n }\n\n /**\n * Execute the given callback if no rows exist for the current query.\n *\n * @return mixed\n * @static\n */\n public static function existsOr($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->existsOr($callback);\n }\n\n /**\n * Execute the given callback if rows exist for the current query.\n *\n * @return mixed\n * @static\n */\n public static function doesntExistOr($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->doesntExistOr($callback);\n }\n\n /**\n * Retrieve the \"count\" result of the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $columns\n * @return int<0, max>\n * @static\n */\n public static function count($columns = '*')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->count($columns);\n }\n\n /**\n * Retrieve the minimum value of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function min($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->min($column);\n }\n\n /**\n * Retrieve the maximum value of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function max($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->max($column);\n }\n\n /**\n * Retrieve the sum of the values of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function sum($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->sum($column);\n }\n\n /**\n * Retrieve the average of the values of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function avg($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->avg($column);\n }\n\n /**\n * Alias for the \"avg\" method.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function average($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->average($column);\n }\n\n /**\n * Execute an aggregate function on the database.\n *\n * @param string $function\n * @param array $columns\n * @return mixed\n * @static\n */\n public static function aggregate($function, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->aggregate($function, $columns);\n }\n\n /**\n * Execute a numeric aggregate function on the database.\n *\n * @param string $function\n * @param array $columns\n * @return float|int\n * @static\n */\n public static function numericAggregate($function, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->numericAggregate($function, $columns);\n }\n\n /**\n * Insert new records into the database.\n *\n * @return bool\n * @static\n */\n public static function insert($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insert($values);\n }\n\n /**\n * Insert new records into the database while ignoring errors.\n *\n * @return int<0, max>\n * @static\n */\n public static function insertOrIgnore($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertOrIgnore($values);\n }\n\n /**\n * Insert a new record and get the value of the primary key.\n *\n * @param string|null $sequence\n * @return int\n * @static\n */\n public static function insertGetId($values, $sequence = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertGetId($values, $sequence);\n }\n\n /**\n * Insert new records into the table using a subquery.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return int\n * @static\n */\n public static function insertUsing($columns, $query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertUsing($columns, $query);\n }\n\n /**\n * Insert new records into the table using a subquery while ignoring errors.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return int\n * @static\n */\n public static function insertOrIgnoreUsing($columns, $query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertOrIgnoreUsing($columns, $query);\n }\n\n /**\n * Update records in a PostgreSQL database using the update from syntax.\n *\n * @return int\n * @static\n */\n public static function updateFrom($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->updateFrom($values);\n }\n\n /**\n * Insert or update a record matching the attributes, and fill it with values.\n *\n * @return bool\n * @static\n */\n public static function updateOrInsert($attributes, $values = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->updateOrInsert($attributes, $values);\n }\n\n /**\n * Increment the given column's values by the given amounts.\n *\n * @param array<string, float|int|numeric-string> $columns\n * @param array<string, mixed> $extra\n * @return int<0, max>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function incrementEach($columns, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->incrementEach($columns, $extra);\n }\n\n /**\n * Decrement the given column's values by the given amounts.\n *\n * @param array<string, float|int|numeric-string> $columns\n * @param array<string, mixed> $extra\n * @return int<0, max>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function decrementEach($columns, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->decrementEach($columns, $extra);\n }\n\n /**\n * Run a truncate statement on the table.\n *\n * @return void\n * @static\n */\n public static function truncate()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n $instance->truncate();\n }\n\n /**\n * Get all of the query builder's columns in a text-only array with all expressions evaluated.\n *\n * @return list<string>\n * @static\n */\n public static function getColumns()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getColumns();\n }\n\n /**\n * Create a raw database expression.\n *\n * @param mixed $value\n * @return \\Illuminate\\Contracts\\Database\\Query\\Expression\n * @static\n */\n public static function raw($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->raw($value);\n }\n\n /**\n * Get the current query value bindings in a flattened array.\n *\n * @return list<mixed>\n * @static\n */\n public static function getBindings()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getBindings();\n }\n\n /**\n * Get the raw array of bindings.\n *\n * @return \\Illuminate\\Database\\Query\\array{ select: list<mixed>,\n * from: list<mixed>,\n * join: list<mixed>,\n * where: list<mixed>,\n * groupBy: list<mixed>,\n * having: list<mixed>,\n * order: list<mixed>,\n * union: list<mixed>,\n * unionOrder: list<mixed>,\n * }\n * @static\n */\n public static function getRawBindings()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getRawBindings();\n }\n\n /**\n * Set the bindings on the query builder.\n *\n * @param list<mixed> $bindings\n * @param \"select\"|\"from\"|\"join\"|\"where\"|\"groupBy\"|\"having\"|\"order\"|\"union\"|\"unionOrder\" $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function setBindings($bindings, $type = 'where')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->setBindings($bindings, $type);\n }\n\n /**\n * Add a binding to the query.\n *\n * @param mixed $value\n * @param \"select\"|\"from\"|\"join\"|\"where\"|\"groupBy\"|\"having\"|\"order\"|\"union\"|\"unionOrder\" $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function addBinding($value, $type = 'where')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addBinding($value, $type);\n }\n\n /**\n * Cast the given binding value.\n *\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function castBinding($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->castBinding($value);\n }\n\n /**\n * Merge an array of bindings into our bindings.\n *\n * @param self $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeBindings($query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->mergeBindings($query);\n }\n\n /**\n * Remove all of the expressions from a list of bindings.\n *\n * @param array<mixed> $bindings\n * @return list<mixed>\n * @static\n */\n public static function cleanBindings($bindings)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cleanBindings($bindings);\n }\n\n /**\n * Get the database query processor instance.\n *\n * @return \\Illuminate\\Database\\Query\\Processors\\Processor\n * @static\n */\n public static function getProcessor()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getProcessor();\n }\n\n /**\n * Get the query grammar instance.\n *\n * @return \\Illuminate\\Database\\Query\\Grammars\\Grammar\n * @static\n */\n public static function getGrammar()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getGrammar();\n }\n\n /**\n * Use the \"write\" PDO connection when executing the query.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function useWritePdo()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->useWritePdo();\n }\n\n /**\n * Clone the query without the given properties.\n *\n * @return static\n * @static\n */\n public static function cloneWithout($properties)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cloneWithout($properties);\n }\n\n /**\n * Clone the query without the given bindings.\n *\n * @return static\n * @static\n */\n public static function cloneWithoutBindings($except)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cloneWithoutBindings($except);\n }\n\n /**\n * Dump the current SQL and bindings.\n *\n * @param mixed $args\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dump(...$args)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dump(...$args);\n }\n\n /**\n * Dump the raw current SQL with embedded bindings.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dumpRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dumpRawSql();\n }\n\n /**\n * Die and dump the current SQL and bindings.\n *\n * @return never\n * @static\n */\n public static function dd()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dd();\n }\n\n /**\n * Die and dump the current SQL with embedded bindings.\n *\n * @return never\n * @static\n */\n public static function ddRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->ddRawSql();\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function wherePast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->wherePast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNowOrPast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNowOrPast($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the past to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWherePast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWherePast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNowOrPast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNowOrPast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the future to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereFuture($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the future or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNowOrFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNowOrFuture($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the future to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereFuture($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the future or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNowOrFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNowOrFuture($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereToday($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereToday($columns, $boolean);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is before today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBeforeToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBeforeToday($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today or before to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTodayOrBefore($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTodayOrBefore($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is after today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAfterToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAfterToday($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today or after to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTodayOrAfter($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTodayOrAfter($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is before today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBeforeToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBeforeToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today or before to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTodayOrBefore($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTodayOrBefore($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is after today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAfterToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAfterToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today or after to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTodayOrAfter($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTodayOrAfter($columns);\n }\n\n /**\n * Explains the query.\n *\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function explain()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->explain();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Database\\Query\\Builder::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Database\\Query\\Builder::mixin($mixin, $replace);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Database\\Query\\Builder::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n}\n class Event extends \\Illuminate\\Support\\Facades\\Event {}\n class File extends \\Illuminate\\Support\\Facades\\File {}\n class Gate extends \\Illuminate\\Support\\Facades\\Gate {}\n class Hash extends \\Illuminate\\Support\\Facades\\Hash {}\n class Http extends \\Illuminate\\Support\\Facades\\Http {}\n class Js extends \\Illuminate\\Support\\Js {}\n class Lang extends \\Illuminate\\Support\\Facades\\Lang {}\n class Log extends \\Illuminate\\Support\\Facades\\Log {}\n class Mail extends \\Illuminate\\Support\\Facades\\Mail {}\n class Notification extends \\Illuminate\\Support\\Facades\\Notification {}\n class Number extends \\Illuminate\\Support\\Number {}\n class Password extends \\Illuminate\\Support\\Facades\\Password {}\n class Process extends \\Illuminate\\Support\\Facades\\Process {}\n class Queue extends \\Illuminate\\Support\\Facades\\Queue {}\n class RateLimiter extends \\Illuminate\\Support\\Facades\\RateLimiter {}\n class Redirect extends \\Illuminate\\Support\\Facades\\Redirect {}\n class Request extends \\Illuminate\\Support\\Facades\\Request {}\n class Response extends \\Illuminate\\Support\\Facades\\Response {}\n class Route extends \\Illuminate\\Support\\Facades\\Route {}\n class Schedule extends \\Illuminate\\Support\\Facades\\Schedule {}\n class Schema extends \\Illuminate\\Support\\Facades\\Schema {}\n class Session extends \\Illuminate\\Support\\Facades\\Session {}\n class Storage extends \\Illuminate\\Support\\Facades\\Storage {}\n class Str extends \\Illuminate\\Support\\Str {}\n class Uri extends \\Illuminate\\Support\\Uri {}\n class URL extends \\Illuminate\\Support\\Facades\\URL {}\n class Validator extends \\Illuminate\\Support\\Facades\\Validator {}\n class View extends \\Illuminate\\Support\\Facades\\View {}\n class Vite extends \\Illuminate\\Support\\Facades\\Vite {}\n class AWS extends \\Aws\\Laravel\\AwsFacade {}\n class Avatar extends \\Laravolt\\Avatar\\Facade {}\n class Fractal extends \\Spatie\\Fractal\\Facades\\Fractal {}\n class Laratrust extends \\Laratrust\\LaratrustFacade {}\n class RedisManager extends \\Illuminate\\Support\\Facades\\Redis {}\n class Sentry extends \\Sentry\\Laravel\\Facade {}\n class Statsd extends \\League\\StatsD\\Laravel5\\Facade\\StatsdFacade {}\n class Debugbar extends \\Barryvdh\\Debugbar\\Facades\\Debugbar {}\n class PDF extends \\Barryvdh\\DomPDF\\Facade\\Pdf {}\n class Pdf extends \\Barryvdh\\DomPDF\\Facade\\Pdf {}\n class Datadog extends \\ChaseConey\\LaravelDatadogHelper\\Datadog {}\n class Flare extends \\Spatie\\LaravelIgnition\\Facades\\Flare {}\n class Hashids extends \\Vinkla\\Hashids\\Facades\\Hashids {}\n}","depth":4,"on_screen":true,"value":"<?php\n/* @noinspection ALL */\n// @formatter:off\n// phpcs:ignoreFile\n\n/**\n * A helper file for Laravel, to provide autocomplete information to your IDE\n * Generated for Laravel 12.33.0.\n *\n * This file should not be included in your code, only analyzed by your IDE!\n *\n * @author Barry vd. Heuvel <barryvdh@gmail.com>\n * @see https://github.com/barryvdh/laravel-ide-helper\n */\nnamespace Illuminate\\Support\\Facades {\n /**\n * @see \\Illuminate\\Foundation\\Application\n */\n class App {\n /**\n * Begin configuring a new Laravel application instance.\n *\n * @param string|null $basePath\n * @return \\Illuminate\\Foundation\\Configuration\\ApplicationBuilder\n * @static\n */\n public static function configure($basePath = null)\n {\n return \\Illuminate\\Foundation\\Application::configure($basePath);\n }\n\n /**\n * Infer the application's base directory from the environment.\n *\n * @return string\n * @static\n */\n public static function inferBasePath()\n {\n return \\Illuminate\\Foundation\\Application::inferBasePath();\n }\n\n /**\n * Get the version number of the application.\n *\n * @return string\n * @static\n */\n public static function version()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->version();\n }\n\n /**\n * Run the given array of bootstrap classes.\n *\n * @param string[] $bootstrappers\n * @return void\n * @static\n */\n public static function bootstrapWith($bootstrappers)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bootstrapWith($bootstrappers);\n }\n\n /**\n * Register a callback to run after loading the environment.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterLoadingEnvironment($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterLoadingEnvironment($callback);\n }\n\n /**\n * Register a callback to run before a bootstrapper.\n *\n * @param string $bootstrapper\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function beforeBootstrapping($bootstrapper, $callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->beforeBootstrapping($bootstrapper, $callback);\n }\n\n /**\n * Register a callback to run after a bootstrapper.\n *\n * @param string $bootstrapper\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterBootstrapping($bootstrapper, $callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterBootstrapping($bootstrapper, $callback);\n }\n\n /**\n * Determine if the application has been bootstrapped before.\n *\n * @return bool\n * @static\n */\n public static function hasBeenBootstrapped()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasBeenBootstrapped();\n }\n\n /**\n * Set the base path for the application.\n *\n * @param string $basePath\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function setBasePath($basePath)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->setBasePath($basePath);\n }\n\n /**\n * Get the path to the application \"app\" directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function path($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->path($path);\n }\n\n /**\n * Set the application directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useAppPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useAppPath($path);\n }\n\n /**\n * Get the base path of the Laravel installation.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function basePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->basePath($path);\n }\n\n /**\n * Get the path to the bootstrap directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function bootstrapPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->bootstrapPath($path);\n }\n\n /**\n * Get the path to the service provider list in the bootstrap directory.\n *\n * @return string\n * @static\n */\n public static function getBootstrapProvidersPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getBootstrapProvidersPath();\n }\n\n /**\n * Set the bootstrap file directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useBootstrapPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useBootstrapPath($path);\n }\n\n /**\n * Get the path to the application configuration files.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function configPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->configPath($path);\n }\n\n /**\n * Set the configuration directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useConfigPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useConfigPath($path);\n }\n\n /**\n * Get the path to the database directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function databasePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->databasePath($path);\n }\n\n /**\n * Set the database directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useDatabasePath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useDatabasePath($path);\n }\n\n /**\n * Get the path to the language files.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function langPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->langPath($path);\n }\n\n /**\n * Set the language file directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useLangPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useLangPath($path);\n }\n\n /**\n * Get the path to the public / web directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function publicPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->publicPath($path);\n }\n\n /**\n * Set the public / web directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function usePublicPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->usePublicPath($path);\n }\n\n /**\n * Get the path to the storage directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function storagePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->storagePath($path);\n }\n\n /**\n * Set the storage directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useStoragePath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useStoragePath($path);\n }\n\n /**\n * Get the path to the resources directory.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function resourcePath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resourcePath($path);\n }\n\n /**\n * Get the path to the views directory.\n * \n * This method returns the first configured path in the array of view paths.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function viewPath($path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->viewPath($path);\n }\n\n /**\n * Join the given paths together.\n *\n * @param string $basePath\n * @param string $path\n * @return string\n * @static\n */\n public static function joinPaths($basePath, $path = '')\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->joinPaths($basePath, $path);\n }\n\n /**\n * Get the path to the environment file directory.\n *\n * @return string\n * @static\n */\n public static function environmentPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentPath();\n }\n\n /**\n * Set the directory for the environment file.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function useEnvironmentPath($path)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->useEnvironmentPath($path);\n }\n\n /**\n * Set the environment file to be loaded during bootstrapping.\n *\n * @param string $file\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function loadEnvironmentFrom($file)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->loadEnvironmentFrom($file);\n }\n\n /**\n * Get the environment file the application is using.\n *\n * @return string\n * @static\n */\n public static function environmentFile()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentFile();\n }\n\n /**\n * Get the fully qualified path to the environment file.\n *\n * @return string\n * @static\n */\n public static function environmentFilePath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environmentFilePath();\n }\n\n /**\n * Get or check the current application environment.\n *\n * @param string|array $environments\n * @return string|bool\n * @static\n */\n public static function environment(...$environments)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->environment(...$environments);\n }\n\n /**\n * Determine if the application is in the local environment.\n *\n * @return bool\n * @static\n */\n public static function isLocal()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isLocal();\n }\n\n /**\n * Determine if the application is in the production environment.\n *\n * @return bool\n * @static\n */\n public static function isProduction()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isProduction();\n }\n\n /**\n * Detect the application's current environment.\n *\n * @param \\Closure $callback\n * @return string\n * @static\n */\n public static function detectEnvironment($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->detectEnvironment($callback);\n }\n\n /**\n * Determine if the application is running in the console.\n *\n * @return bool\n * @static\n */\n public static function runningInConsole()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningInConsole();\n }\n\n /**\n * Determine if the application is running any of the given console commands.\n *\n * @param string|array $commands\n * @return bool\n * @static\n */\n public static function runningConsoleCommand(...$commands)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningConsoleCommand(...$commands);\n }\n\n /**\n * Determine if the application is running unit tests.\n *\n * @return bool\n * @static\n */\n public static function runningUnitTests()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->runningUnitTests();\n }\n\n /**\n * Determine if the application is running with debug mode enabled.\n *\n * @return bool\n * @static\n */\n public static function hasDebugModeEnabled()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasDebugModeEnabled();\n }\n\n /**\n * Register a new registered listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function registered($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registered($callback);\n }\n\n /**\n * Register all of the configured providers.\n *\n * @return void\n * @static\n */\n public static function registerConfiguredProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerConfiguredProviders();\n }\n\n /**\n * Register a service provider with the application.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @param bool $force\n * @return \\Illuminate\\Support\\ServiceProvider\n * @static\n */\n public static function register($provider, $force = false)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->register($provider, $force);\n }\n\n /**\n * Get the registered service provider instance if it exists.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @return \\Illuminate\\Support\\ServiceProvider|null\n * @static\n */\n public static function getProvider($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getProvider($provider);\n }\n\n /**\n * Get the registered service provider instances if any exist.\n *\n * @param \\Illuminate\\Support\\ServiceProvider|string $provider\n * @return array\n * @static\n */\n public static function getProviders($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getProviders($provider);\n }\n\n /**\n * Resolve a service provider instance from the class name.\n *\n * @param string $provider\n * @return \\Illuminate\\Support\\ServiceProvider\n * @static\n */\n public static function resolveProvider($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolveProvider($provider);\n }\n\n /**\n * Load and boot all of the remaining deferred providers.\n *\n * @return void\n * @static\n */\n public static function loadDeferredProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->loadDeferredProviders();\n }\n\n /**\n * Load the provider for a deferred service.\n *\n * @param string $service\n * @return void\n * @static\n */\n public static function loadDeferredProvider($service)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->loadDeferredProvider($service);\n }\n\n /**\n * Register a deferred provider and service.\n *\n * @param string $provider\n * @param string|null $service\n * @return void\n * @static\n */\n public static function registerDeferredProvider($provider, $service = null)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerDeferredProvider($provider, $service);\n }\n\n /**\n * Resolve the given type from the container.\n *\n * @template TClass of object\n * @param string|class-string<TClass> $abstract\n * @param array $parameters\n * @return ($abstract is class-string<TClass> ? TClass : mixed)\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function make($abstract, $parameters = [])\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->make($abstract, $parameters);\n }\n\n /**\n * Determine if the given abstract type has been bound.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function bound($abstract)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->bound($abstract);\n }\n\n /**\n * Determine if the application has booted.\n *\n * @return bool\n * @static\n */\n public static function isBooted()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isBooted();\n }\n\n /**\n * Boot the application's service providers.\n *\n * @return void\n * @static\n */\n public static function boot()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->boot();\n }\n\n /**\n * Register a new boot listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function booting($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->booting($callback);\n }\n\n /**\n * Register a new \"booted\" listener.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function booted($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->booted($callback);\n }\n\n /**\n * {@inheritdoc}\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function handle($request, $type = 1, $catch = true)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->handle($request, $type, $catch);\n }\n\n /**\n * Handle the incoming HTTP request and send the response to the browser.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function handleRequest($request)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->handleRequest($request);\n }\n\n /**\n * Handle the incoming Artisan command.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @return int\n * @static\n */\n public static function handleCommand($input)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->handleCommand($input);\n }\n\n /**\n * Determine if the framework's base configuration should be merged.\n *\n * @return bool\n * @static\n */\n public static function shouldMergeFrameworkConfiguration()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->shouldMergeFrameworkConfiguration();\n }\n\n /**\n * Indicate that the framework's base configuration should not be merged.\n *\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function dontMergeFrameworkConfiguration()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->dontMergeFrameworkConfiguration();\n }\n\n /**\n * Determine if middleware has been disabled for the application.\n *\n * @return bool\n * @static\n */\n public static function shouldSkipMiddleware()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->shouldSkipMiddleware();\n }\n\n /**\n * Get the path to the cached services.php file.\n *\n * @return string\n * @static\n */\n public static function getCachedServicesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedServicesPath();\n }\n\n /**\n * Get the path to the cached packages.php file.\n *\n * @return string\n * @static\n */\n public static function getCachedPackagesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedPackagesPath();\n }\n\n /**\n * Determine if the application configuration is cached.\n *\n * @return bool\n * @static\n */\n public static function configurationIsCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->configurationIsCached();\n }\n\n /**\n * Get the path to the configuration cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedConfigPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedConfigPath();\n }\n\n /**\n * Determine if the application routes are cached.\n *\n * @return bool\n * @static\n */\n public static function routesAreCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->routesAreCached();\n }\n\n /**\n * Get the path to the routes cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedRoutesPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedRoutesPath();\n }\n\n /**\n * Determine if the application events are cached.\n *\n * @return bool\n * @static\n */\n public static function eventsAreCached()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->eventsAreCached();\n }\n\n /**\n * Get the path to the events cache file.\n *\n * @return string\n * @static\n */\n public static function getCachedEventsPath()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getCachedEventsPath();\n }\n\n /**\n * Add new prefix to list of absolute path prefixes.\n *\n * @param string $prefix\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function addAbsoluteCachePathPrefix($prefix)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->addAbsoluteCachePathPrefix($prefix);\n }\n\n /**\n * Get an instance of the maintenance mode manager implementation.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\MaintenanceMode\n * @static\n */\n public static function maintenanceMode()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->maintenanceMode();\n }\n\n /**\n * Determine if the application is currently down for maintenance.\n *\n * @return bool\n * @static\n */\n public static function isDownForMaintenance()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isDownForMaintenance();\n }\n\n /**\n * Throw an HttpException with the given data.\n *\n * @param int $code\n * @param string $message\n * @param array $headers\n * @return never\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\HttpException\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException\n * @static\n */\n public static function abort($code, $message = '', $headers = [])\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->abort($code, $message, $headers);\n }\n\n /**\n * Register a terminating callback with the application.\n *\n * @param callable|string $callback\n * @return \\Illuminate\\Foundation\\Application\n * @static\n */\n public static function terminating($callback)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->terminating($callback);\n }\n\n /**\n * Terminate the application.\n *\n * @return void\n * @static\n */\n public static function terminate()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->terminate();\n }\n\n /**\n * Get the service providers that have been loaded.\n *\n * @return array<string, bool>\n * @static\n */\n public static function getLoadedProviders()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getLoadedProviders();\n }\n\n /**\n * Determine if the given service provider is loaded.\n *\n * @param string $provider\n * @return bool\n * @static\n */\n public static function providerIsLoaded($provider)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->providerIsLoaded($provider);\n }\n\n /**\n * Get the application's deferred services.\n *\n * @return array\n * @static\n */\n public static function getDeferredServices()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getDeferredServices();\n }\n\n /**\n * Set the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function setDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setDeferredServices($services);\n }\n\n /**\n * Determine if the given service is a deferred service.\n *\n * @param string $service\n * @return bool\n * @static\n */\n public static function isDeferredService($service)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isDeferredService($service);\n }\n\n /**\n * Add an array of services to the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function addDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->addDeferredServices($services);\n }\n\n /**\n * Remove an array of services from the application's deferred services.\n *\n * @param array $services\n * @return void\n * @static\n */\n public static function removeDeferredServices($services)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->removeDeferredServices($services);\n }\n\n /**\n * Configure the real-time facade namespace.\n *\n * @param string $namespace\n * @return void\n * @static\n */\n public static function provideFacades($namespace)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->provideFacades($namespace);\n }\n\n /**\n * Get the current application locale.\n *\n * @return string\n * @static\n */\n public static function getLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getLocale();\n }\n\n /**\n * Get the current application locale.\n *\n * @return string\n * @static\n */\n public static function currentLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentLocale();\n }\n\n /**\n * Get the current application fallback locale.\n *\n * @return string\n * @static\n */\n public static function getFallbackLocale()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getFallbackLocale();\n }\n\n /**\n * Set the current application locale.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setLocale($locale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setLocale($locale);\n }\n\n /**\n * Set the current application fallback locale.\n *\n * @param string $fallbackLocale\n * @return void\n * @static\n */\n public static function setFallbackLocale($fallbackLocale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->setFallbackLocale($fallbackLocale);\n }\n\n /**\n * Determine if the application locale is the given locale.\n *\n * @param string $locale\n * @return bool\n * @static\n */\n public static function isLocale($locale)\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isLocale($locale);\n }\n\n /**\n * Register the core class aliases in the container.\n *\n * @return void\n * @static\n */\n public static function registerCoreContainerAliases()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->registerCoreContainerAliases();\n }\n\n /**\n * Flush the container of all bindings and resolved instances.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->flush();\n }\n\n /**\n * Get the application namespace.\n *\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function getNamespace()\n {\n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getNamespace();\n }\n\n /**\n * Define a contextual binding.\n *\n * @param array|string $concrete\n * @return \\Illuminate\\Contracts\\Container\\ContextualBindingBuilder\n * @static\n */\n public static function when($concrete)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->when($concrete);\n }\n\n /**\n * Define a contextual binding based on an attribute.\n *\n * @param string $attribute\n * @param \\Closure $handler\n * @return void\n * @static\n */\n public static function whenHasAttribute($attribute, $handler)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->whenHasAttribute($attribute, $handler);\n }\n\n /**\n * Returns true if the container can return an entry for the given identifier.\n * \n * Returns false otherwise.\n * \n * `has($id)` returning true does not mean that `get($id)` will not throw an exception.\n * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.\n *\n * @return bool\n * @param string $id Identifier of the entry to look for.\n * @return bool\n * @static\n */\n public static function has($id)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->has($id);\n }\n\n /**\n * Determine if the given abstract type has been resolved.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function resolved($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolved($abstract);\n }\n\n /**\n * Determine if a given type is shared.\n *\n * @param string $abstract\n * @return bool\n * @static\n */\n public static function isShared($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isShared($abstract);\n }\n\n /**\n * Determine if a given string is an alias.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function isAlias($name)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->isAlias($name);\n }\n\n /**\n * Register a binding with the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @param bool $shared\n * @return void\n * @throws \\TypeError\n * @throws ReflectionException\n * @static\n */\n public static function bind($abstract, $concrete = null, $shared = false)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bind($abstract, $concrete, $shared);\n }\n\n /**\n * Determine if the container has a method binding.\n *\n * @param string $method\n * @return bool\n * @static\n */\n public static function hasMethodBinding($method)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->hasMethodBinding($method);\n }\n\n /**\n * Bind a callback to resolve with Container::call.\n *\n * @param array|string $method\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function bindMethod($method, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bindMethod($method, $callback);\n }\n\n /**\n * Get the method binding for the given method.\n *\n * @param string $method\n * @param mixed $instance\n * @return mixed\n * @static\n */\n public static function callMethodBinding($method, $instance)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->callMethodBinding($method, $instance);\n }\n\n /**\n * Add a contextual binding to the container.\n *\n * @param string $concrete\n * @param \\Closure|string $abstract\n * @param \\Closure|string $implementation\n * @return void\n * @static\n */\n public static function addContextualBinding($concrete, $abstract, $implementation)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->addContextualBinding($concrete, $abstract, $implementation);\n }\n\n /**\n * Register a binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @param bool $shared\n * @return void\n * @static\n */\n public static function bindIf($abstract, $concrete = null, $shared = false)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->bindIf($abstract, $concrete, $shared);\n }\n\n /**\n * Register a shared binding in the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function singleton($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->singleton($abstract, $concrete);\n }\n\n /**\n * Register a shared binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function singletonIf($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->singletonIf($abstract, $concrete);\n }\n\n /**\n * Register a scoped binding in the container.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function scoped($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->scoped($abstract, $concrete);\n }\n\n /**\n * Register a scoped binding if it hasn't already been registered.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|string|null $concrete\n * @return void\n * @static\n */\n public static function scopedIf($abstract, $concrete = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->scopedIf($abstract, $concrete);\n }\n\n /**\n * \"Extend\" an abstract type in the container.\n *\n * @param string $abstract\n * @param \\Closure $closure\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function extend($abstract, $closure)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->extend($abstract, $closure);\n }\n\n /**\n * Register an existing instance as shared in the container.\n *\n * @template TInstance of mixed\n * @param string $abstract\n * @param TInstance $instance\n * @return TInstance\n * @static\n */\n public static function instance($abstract, $instance)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->instance($abstract, $instance);\n }\n\n /**\n * Assign a set of tags to a given binding.\n *\n * @param array|string $abstracts\n * @param mixed $tags\n * @return void\n * @static\n */\n public static function tag($abstracts, $tags)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->tag($abstracts, $tags);\n }\n\n /**\n * Resolve all of the bindings for a given tag.\n *\n * @param string $tag\n * @return iterable\n * @static\n */\n public static function tagged($tag)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->tagged($tag);\n }\n\n /**\n * Alias a type to a different name.\n *\n * @param string $abstract\n * @param string $alias\n * @return void\n * @throws \\LogicException\n * @static\n */\n public static function alias($abstract, $alias)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->alias($abstract, $alias);\n }\n\n /**\n * Bind a new callback to an abstract's rebind event.\n *\n * @param string $abstract\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function rebinding($abstract, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->rebinding($abstract, $callback);\n }\n\n /**\n * Refresh an instance on the given target and method.\n *\n * @param string $abstract\n * @param mixed $target\n * @param string $method\n * @return mixed\n * @static\n */\n public static function refresh($abstract, $target, $method)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->refresh($abstract, $target, $method);\n }\n\n /**\n * Wrap the given closure such that its dependencies will be injected when executed.\n *\n * @param \\Closure $callback\n * @param array $parameters\n * @return \\Closure\n * @static\n */\n public static function wrap($callback, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->wrap($callback, $parameters);\n }\n\n /**\n * Call the given Closure / class@method and inject its dependencies.\n *\n * @param callable|string $callback\n * @param array<string, mixed> $parameters\n * @param string|null $defaultMethod\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function call($callback, $parameters = [], $defaultMethod = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->call($callback, $parameters, $defaultMethod);\n }\n\n /**\n * Get a closure to resolve the given type from the container.\n *\n * @template TClass of object\n * @param string|class-string<TClass> $abstract\n * @return ($abstract is class-string<TClass> ? \\Closure(): TClass : \\Closure(): mixed)\n * @static\n */\n public static function factory($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->factory($abstract);\n }\n\n /**\n * An alias function name for make().\n *\n * @template TClass of object\n * @param string|class-string<TClass>|callable $abstract\n * @param array $parameters\n * @return ($abstract is class-string<TClass> ? TClass : mixed)\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function makeWith($abstract, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->makeWith($abstract, $parameters);\n }\n\n /**\n * {@inheritdoc}\n *\n * @template TClass of object\n * @param string|class-string<TClass> $id\n * @return ($id is class-string<TClass> ? TClass : mixed)\n * @static\n */\n public static function get($id)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->get($id);\n }\n\n /**\n * Instantiate a concrete instance of the given type.\n *\n * @template TClass of object\n * @param \\Closure(static, array): TClass|class-string<TClass> $concrete\n * @return TClass\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @throws \\Illuminate\\Contracts\\Container\\CircularDependencyException\n * @static\n */\n public static function build($concrete)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->build($concrete);\n }\n\n /**\n * Resolve a dependency based on an attribute.\n *\n * @param \\ReflectionAttribute $attribute\n * @return mixed\n * @static\n */\n public static function resolveFromAttribute($attribute)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->resolveFromAttribute($attribute);\n }\n\n /**\n * Register a new before resolving callback for all types.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function beforeResolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->beforeResolving($abstract, $callback);\n }\n\n /**\n * Register a new resolving callback.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function resolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->resolving($abstract, $callback);\n }\n\n /**\n * Register a new after resolving callback for all types.\n *\n * @param \\Closure|string $abstract\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function afterResolving($abstract, $callback = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterResolving($abstract, $callback);\n }\n\n /**\n * Register a new after resolving attribute callback for all types.\n *\n * @param string $attribute\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function afterResolvingAttribute($attribute, $callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->afterResolvingAttribute($attribute, $callback);\n }\n\n /**\n * Fire all of the after resolving attribute callbacks.\n *\n * @param \\ReflectionAttribute[] $attributes\n * @param mixed $object\n * @return void\n * @static\n */\n public static function fireAfterResolvingAttributeCallbacks($attributes, $object)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->fireAfterResolvingAttributeCallbacks($attributes, $object);\n }\n\n /**\n * Get the name of the binding the container is currently resolving.\n *\n * @return class-string|string|null\n * @static\n */\n public static function currentlyResolving()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentlyResolving();\n }\n\n /**\n * Get the container's bindings.\n *\n * @return array\n * @static\n */\n public static function getBindings()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getBindings();\n }\n\n /**\n * Get the alias for an abstract if available.\n *\n * @param string $abstract\n * @return string\n * @static\n */\n public static function getAlias($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->getAlias($abstract);\n }\n\n /**\n * Remove all of the extender callbacks for a given type.\n *\n * @param string $abstract\n * @return void\n * @static\n */\n public static function forgetExtenders($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetExtenders($abstract);\n }\n\n /**\n * Remove a resolved instance from the instance cache.\n *\n * @param string $abstract\n * @return void\n * @static\n */\n public static function forgetInstance($abstract)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetInstance($abstract);\n }\n\n /**\n * Clear all of the instances from the container.\n *\n * @return void\n * @static\n */\n public static function forgetInstances()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetInstances();\n }\n\n /**\n * Clear all of the scoped instances from the container.\n *\n * @return void\n * @static\n */\n public static function forgetScopedInstances()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->forgetScopedInstances();\n }\n\n /**\n * Set the callback which determines the current container environment.\n *\n * @param (callable(array<int, string>|string): bool|string)|null $callback\n * @return void\n * @static\n */\n public static function resolveEnvironmentUsing($callback)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->resolveEnvironmentUsing($callback);\n }\n\n /**\n * Determine the environment for the container.\n *\n * @param array<int, string>|string $environments\n * @return bool\n * @static\n */\n public static function currentEnvironmentIs($environments)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->currentEnvironmentIs($environments);\n }\n\n /**\n * Get the globally available instance of the container.\n *\n * @return static\n * @static\n */\n public static function getInstance()\n {\n //Method inherited from \\Illuminate\\Container\\Container \n return \\Illuminate\\Foundation\\Application::getInstance();\n }\n\n /**\n * Set the shared instance of the container.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container|null $container\n * @return \\Illuminate\\Contracts\\Container\\Container|static\n * @static\n */\n public static function setInstance($container = null)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n return \\Illuminate\\Foundation\\Application::setInstance($container);\n }\n\n /**\n * Determine if a given offset exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Get the value at a given offset.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Set the value at a given offset.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Unset the value at a given offset.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n //Method inherited from \\Illuminate\\Container\\Container \n /** @var \\Illuminate\\Foundation\\Application $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Foundation\\Application::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Foundation\\Application::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Foundation\\Application::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Foundation\\Application::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Foundation\\Console\\Kernel\n */\n class Artisan {\n /**\n * Re-route the Symfony command events to their Laravel counterparts.\n *\n * @internal\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function rerouteSymfonyCommandEvents()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->rerouteSymfonyCommandEvents();\n }\n\n /**\n * Run the console application.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @param \\Symfony\\Component\\Console\\Output\\OutputInterface|null $output\n * @return int\n * @static\n */\n public static function handle($input, $output = null)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->handle($input, $output);\n }\n\n /**\n * Terminate the application.\n *\n * @param \\Symfony\\Component\\Console\\Input\\InputInterface $input\n * @param int $status\n * @return void\n * @static\n */\n public static function terminate($input, $status)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->terminate($input, $status);\n }\n\n /**\n * Register a callback to be invoked when the command lifecycle duration exceeds a given amount of time.\n *\n * @param \\DateTimeInterface|\\Carbon\\CarbonInterval|float|int $threshold\n * @param callable $handler\n * @return void\n * @static\n */\n public static function whenCommandLifecycleIsLongerThan($threshold, $handler)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->whenCommandLifecycleIsLongerThan($threshold, $handler);\n }\n\n /**\n * When the command being handled started.\n *\n * @return \\Illuminate\\Support\\Carbon|null\n * @static\n */\n public static function commandStartedAt()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->commandStartedAt();\n }\n\n /**\n * Resolve a console schedule instance.\n *\n * @return \\Illuminate\\Console\\Scheduling\\Schedule\n * @static\n */\n public static function resolveConsoleSchedule()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->resolveConsoleSchedule();\n }\n\n /**\n * Register a Closure based command with the application.\n *\n * @param string $signature\n * @param \\Closure $callback\n * @return \\Illuminate\\Foundation\\Console\\ClosureCommand\n * @static\n */\n public static function command($signature, $callback)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->command($signature, $callback);\n }\n\n /**\n * Register the given command with the console application.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command $command\n * @return void\n * @static\n */\n public static function registerCommand($command)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->registerCommand($command);\n }\n\n /**\n * Run an Artisan console command by name.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command|string $command\n * @param array $parameters\n * @param \\Symfony\\Component\\Console\\Output\\OutputInterface|null $outputBuffer\n * @return int\n * @throws \\Symfony\\Component\\Console\\Exception\\CommandNotFoundException\n * @static\n */\n public static function call($command, $parameters = [], $outputBuffer = null)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->call($command, $parameters, $outputBuffer);\n }\n\n /**\n * Queue the given console command.\n *\n * @param string $command\n * @param array $parameters\n * @return \\Illuminate\\Foundation\\Bus\\PendingDispatch\n * @static\n */\n public static function queue($command, $parameters = [])\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->queue($command, $parameters);\n }\n\n /**\n * Get all of the commands registered with the console.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->all();\n }\n\n /**\n * Get the output for the last run command.\n *\n * @return string\n * @static\n */\n public static function output()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->output();\n }\n\n /**\n * Bootstrap the application for artisan commands.\n *\n * @return void\n * @static\n */\n public static function bootstrap()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->bootstrap();\n }\n\n /**\n * Bootstrap the application without booting service providers.\n *\n * @return void\n * @static\n */\n public static function bootstrapWithoutBootingProviders()\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->bootstrapWithoutBootingProviders();\n }\n\n /**\n * Set the Artisan application instance.\n *\n * @param \\Illuminate\\Console\\Application|null $artisan\n * @return void\n * @static\n */\n public static function setArtisan($artisan)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n $instance->setArtisan($artisan);\n }\n\n /**\n * Set the Artisan commands provided by the application.\n *\n * @param array $commands\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommands($commands)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommands($commands);\n }\n\n /**\n * Set the paths that should have their Artisan commands automatically discovered.\n *\n * @param array $paths\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommandPaths($paths)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommandPaths($paths);\n }\n\n /**\n * Set the paths that should have their Artisan \"routes\" automatically discovered.\n *\n * @param array $paths\n * @return \\Jiminny\\Console\\Kernel\n * @static\n */\n public static function addCommandRoutePaths($paths)\n {\n //Method inherited from \\Illuminate\\Foundation\\Console\\Kernel \n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->addCommandRoutePaths($paths);\n }\n\n /**\n * Confirm before proceeding with the action.\n * \n * This method only asks for confirmation in production.\n *\n * @param string $warning\n * @param \\Closure|bool|null $callback\n * @return bool\n * @static\n */\n public static function confirmToProceed($warning = 'Application In Production', $callback = null)\n {\n /** @var \\Jiminny\\Console\\Kernel $instance */\n return $instance->confirmToProceed($warning, $callback);\n }\n\n }\n /**\n * @see \\Illuminate\\Auth\\AuthManager\n * @see \\Illuminate\\Auth\\SessionGuard\n */\n class Auth {\n /**\n * Attempt to get the guard from the local cache.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Auth\\Guard|\\Illuminate\\Contracts\\Auth\\StatefulGuard\n * @static\n */\n public static function guard($name = null)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->guard($name);\n }\n\n /**\n * Create a session based authentication guard.\n *\n * @param string $name\n * @param array $config\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function createSessionDriver($name, $config)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createSessionDriver($name, $config);\n }\n\n /**\n * Create a token based authentication guard.\n *\n * @param string $name\n * @param array $config\n * @return \\Illuminate\\Auth\\TokenGuard\n * @static\n */\n public static function createTokenDriver($name, $config)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createTokenDriver($name, $config);\n }\n\n /**\n * Get the default authentication driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default guard driver the factory should serve.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function shouldUse($name)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n $instance->shouldUse($name);\n }\n\n /**\n * Set the default authentication driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Register a new callback based request guard.\n *\n * @param string $driver\n * @param callable $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function viaRequest($driver, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->viaRequest($driver, $callback);\n }\n\n /**\n * Get the user resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function userResolver()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->userResolver();\n }\n\n /**\n * Set the callback to be used to resolve users.\n *\n * @param \\Closure $userResolver\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function resolveUsersUsing($userResolver)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->resolveUsersUsing($userResolver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Register a custom provider creator Closure.\n *\n * @param string $name\n * @param \\Closure $callback\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function provider($name, $callback)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->provider($name, $callback);\n }\n\n /**\n * Determines if any guards have already been resolved.\n *\n * @return bool\n * @static\n */\n public static function hasResolvedGuards()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->hasResolvedGuards();\n }\n\n /**\n * Forget all of the resolved guard instances.\n *\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function forgetGuards()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->forgetGuards();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Auth\\AuthManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Create the user provider implementation for the driver.\n *\n * @param string|null $provider\n * @return \\Illuminate\\Contracts\\Auth\\UserProvider|null\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function createUserProvider($provider = null)\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->createUserProvider($provider);\n }\n\n /**\n * Get the default user provider name.\n *\n * @return string\n * @static\n */\n public static function getDefaultUserProvider()\n {\n /** @var \\Illuminate\\Auth\\AuthManager $instance */\n return $instance->getDefaultUserProvider();\n }\n\n /**\n * Get the currently authenticated user.\n *\n * @return \\Jiminny\\Models\\User|null\n * @static\n */\n public static function user()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->user();\n }\n\n /**\n * Get the ID for the currently authenticated user.\n *\n * @return int|string|null\n * @static\n */\n public static function id()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->id();\n }\n\n /**\n * Log a user into the application without sessions or cookies.\n *\n * @param array $credentials\n * @return bool\n * @static\n */\n public static function once($credentials = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->once($credentials);\n }\n\n /**\n * Log the given user ID into the application without sessions or cookies.\n *\n * @param mixed $id\n * @return \\Jiminny\\Models\\User|false\n * @static\n */\n public static function onceUsingId($id)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->onceUsingId($id);\n }\n\n /**\n * Validate a user's credentials.\n *\n * @param array $credentials\n * @return bool\n * @static\n */\n public static function validate($credentials = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->validate($credentials);\n }\n\n /**\n * Attempt to authenticate using HTTP Basic Auth.\n *\n * @param string $field\n * @param array $extraConditions\n * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException\n * @static\n */\n public static function basic($field = 'email', $extraConditions = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->basic($field, $extraConditions);\n }\n\n /**\n * Perform a stateless HTTP Basic login attempt.\n *\n * @param string $field\n * @param array $extraConditions\n * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n * @throws \\Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException\n * @static\n */\n public static function onceBasic($field = 'email', $extraConditions = [])\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->onceBasic($field, $extraConditions);\n }\n\n /**\n * Attempt to authenticate a user using the given credentials.\n *\n * @param array $credentials\n * @param bool $remember\n * @return bool\n * @static\n */\n public static function attempt($credentials = [], $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->attempt($credentials, $remember);\n }\n\n /**\n * Attempt to authenticate a user with credentials and additional callbacks.\n *\n * @param array $credentials\n * @param array|callable|null $callbacks\n * @param bool $remember\n * @return bool\n * @static\n */\n public static function attemptWhen($credentials = [], $callbacks = null, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->attemptWhen($credentials, $callbacks, $remember);\n }\n\n /**\n * Log the given user ID into the application.\n *\n * @param mixed $id\n * @param bool $remember\n * @return \\Jiminny\\Models\\User|false\n * @static\n */\n public static function loginUsingId($id, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->loginUsingId($id, $remember);\n }\n\n /**\n * Log a user into the application.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable $user\n * @param bool $remember\n * @return void\n * @static\n */\n public static function login($user, $remember = false)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->login($user, $remember);\n }\n\n /**\n * Log the user out of the application.\n *\n * @return void\n * @static\n */\n public static function logout()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->logout();\n }\n\n /**\n * Log the user out of the application on their current device only.\n * \n * This method does not cycle the \"remember\" token.\n *\n * @return void\n * @static\n */\n public static function logoutCurrentDevice()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->logoutCurrentDevice();\n }\n\n /**\n * Invalidate other sessions for the current user.\n * \n * The application must be using the AuthenticateSession middleware.\n *\n * @param string $password\n * @return \\Jiminny\\Models\\User|null\n * @throws \\Illuminate\\Auth\\AuthenticationException\n * @static\n */\n public static function logoutOtherDevices($password)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->logoutOtherDevices($password);\n }\n\n /**\n * Register an authentication attempt event listener.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function attempting($callback)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->attempting($callback);\n }\n\n /**\n * Get the last user we attempted to authenticate.\n *\n * @return \\Jiminny\\Models\\User\n * @static\n */\n public static function getLastAttempted()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getLastAttempted();\n }\n\n /**\n * Get a unique identifier for the auth session value.\n *\n * @return string\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getName();\n }\n\n /**\n * Get the name of the cookie used to store the \"recaller\".\n *\n * @return string\n * @static\n */\n public static function getRecallerName()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getRecallerName();\n }\n\n /**\n * Determine if the user was authenticated via \"remember me\" cookie.\n *\n * @return bool\n * @static\n */\n public static function viaRemember()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->viaRemember();\n }\n\n /**\n * Set the number of minutes the remember me cookie should be valid for.\n *\n * @param int $minutes\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setRememberDuration($minutes)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setRememberDuration($minutes);\n }\n\n /**\n * Get the cookie creator instance used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Cookie\\QueueingFactory\n * @throws \\RuntimeException\n * @static\n */\n public static function getCookieJar()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getCookieJar();\n }\n\n /**\n * Set the cookie creator instance used by the guard.\n *\n * @param \\Illuminate\\Contracts\\Cookie\\QueueingFactory $cookie\n * @return void\n * @static\n */\n public static function setCookieJar($cookie)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setCookieJar($cookie);\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setDispatcher($events)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setDispatcher($events);\n }\n\n /**\n * Get the session store used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Session\\Session\n * @static\n */\n public static function getSession()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getSession();\n }\n\n /**\n * Return the currently cached user.\n *\n * @return \\Jiminny\\Models\\User|null\n * @static\n */\n public static function getUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getUser();\n }\n\n /**\n * Set the current user.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable $user\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setUser($user)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setUser($user);\n }\n\n /**\n * Get the current request instance.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Request\n * @static\n */\n public static function getRequest()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getRequest();\n }\n\n /**\n * Set the current request instance.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function setRequest($request)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->setRequest($request);\n }\n\n /**\n * Get the timebox instance used by the guard.\n *\n * @return \\Illuminate\\Support\\Timebox\n * @static\n */\n public static function getTimebox()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getTimebox();\n }\n\n /**\n * Determine if the current user is authenticated. If not, throw an exception.\n *\n * @return \\Jiminny\\Models\\User\n * @throws \\Illuminate\\Auth\\AuthenticationException\n * @static\n */\n public static function authenticate()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->authenticate();\n }\n\n /**\n * Determine if the guard has a user instance.\n *\n * @return bool\n * @static\n */\n public static function hasUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->hasUser();\n }\n\n /**\n * Determine if the current user is authenticated.\n *\n * @return bool\n * @static\n */\n public static function check()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->check();\n }\n\n /**\n * Determine if the current user is a guest.\n *\n * @return bool\n * @static\n */\n public static function guest()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->guest();\n }\n\n /**\n * Forget the current user.\n *\n * @return \\Illuminate\\Auth\\SessionGuard\n * @static\n */\n public static function forgetUser()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->forgetUser();\n }\n\n /**\n * Get the user provider used by the guard.\n *\n * @return \\Illuminate\\Contracts\\Auth\\UserProvider\n * @static\n */\n public static function getProvider()\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n return $instance->getProvider();\n }\n\n /**\n * Set the user provider used by the guard.\n *\n * @param \\Illuminate\\Contracts\\Auth\\UserProvider $provider\n * @return void\n * @static\n */\n public static function setProvider($provider)\n {\n /** @var \\Illuminate\\Auth\\SessionGuard $instance */\n $instance->setProvider($provider);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Auth\\SessionGuard::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Auth\\SessionGuard::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Auth\\SessionGuard::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Auth\\SessionGuard::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\View\\Compilers\\BladeCompiler\n */\n class Blade {\n /**\n * Compile the view at the given path.\n *\n * @param string|null $path\n * @return void\n * @static\n */\n public static function compile($path = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->compile($path);\n }\n\n /**\n * Get the path currently being compiled.\n *\n * @return string\n * @static\n */\n public static function getPath()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getPath();\n }\n\n /**\n * Set the path currently being compiled.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function setPath($path)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->setPath($path);\n }\n\n /**\n * Compile the given Blade template contents.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function compileString($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileString($value);\n }\n\n /**\n * Evaluate and render a Blade string to HTML.\n *\n * @param string $string\n * @param array $data\n * @param bool $deleteCachedView\n * @return string\n * @static\n */\n public static function render($string, $data = [], $deleteCachedView = false)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::render($string, $data, $deleteCachedView);\n }\n\n /**\n * Render a component instance to HTML.\n *\n * @param \\Illuminate\\View\\Component $component\n * @return string\n * @static\n */\n public static function renderComponent($component)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::renderComponent($component);\n }\n\n /**\n * Strip the parentheses from the given expression.\n *\n * @param string $expression\n * @return string\n * @static\n */\n public static function stripParentheses($expression)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->stripParentheses($expression);\n }\n\n /**\n * Register a custom Blade compiler.\n *\n * @param callable $compiler\n * @return void\n * @static\n */\n public static function extend($compiler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->extend($compiler);\n }\n\n /**\n * Get the extensions used by the compiler.\n *\n * @return array\n * @static\n */\n public static function getExtensions()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getExtensions();\n }\n\n /**\n * Register an \"if\" statement directive.\n *\n * @param string $name\n * @param callable $callback\n * @return void\n * @static\n */\n public static function if($name, $callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->if($name, $callback);\n }\n\n /**\n * Check the result of a condition.\n *\n * @param string $name\n * @param mixed $parameters\n * @return bool\n * @static\n */\n public static function check($name, ...$parameters)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->check($name, ...$parameters);\n }\n\n /**\n * Register a class-based component alias directive.\n *\n * @param string $class\n * @param string|null $alias\n * @param string $prefix\n * @return void\n * @static\n */\n public static function component($class, $alias = null, $prefix = '')\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->component($class, $alias, $prefix);\n }\n\n /**\n * Register an array of class-based components.\n *\n * @param array $components\n * @param string $prefix\n * @return void\n * @static\n */\n public static function components($components, $prefix = '')\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->components($components, $prefix);\n }\n\n /**\n * Get the registered class component aliases.\n *\n * @return array\n * @static\n */\n public static function getClassComponentAliases()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getClassComponentAliases();\n }\n\n /**\n * Register a new anonymous component path.\n *\n * @param string $path\n * @param string|null $prefix\n * @return void\n * @static\n */\n public static function anonymousComponentPath($path, $prefix = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->anonymousComponentPath($path, $prefix);\n }\n\n /**\n * Register an anonymous component namespace.\n *\n * @param string $directory\n * @param string|null $prefix\n * @return void\n * @static\n */\n public static function anonymousComponentNamespace($directory, $prefix = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->anonymousComponentNamespace($directory, $prefix);\n }\n\n /**\n * Register a class-based component namespace.\n *\n * @param string $namespace\n * @param string $prefix\n * @return void\n * @static\n */\n public static function componentNamespace($namespace, $prefix)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->componentNamespace($namespace, $prefix);\n }\n\n /**\n * Get the registered anonymous component paths.\n *\n * @return array\n * @static\n */\n public static function getAnonymousComponentPaths()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getAnonymousComponentPaths();\n }\n\n /**\n * Get the registered anonymous component namespaces.\n *\n * @return array\n * @static\n */\n public static function getAnonymousComponentNamespaces()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getAnonymousComponentNamespaces();\n }\n\n /**\n * Get the registered class component namespaces.\n *\n * @return array\n * @static\n */\n public static function getClassComponentNamespaces()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getClassComponentNamespaces();\n }\n\n /**\n * Register a component alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function aliasComponent($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->aliasComponent($path, $alias);\n }\n\n /**\n * Register an include alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function include($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->include($path, $alias);\n }\n\n /**\n * Register an include alias directive.\n *\n * @param string $path\n * @param string|null $alias\n * @return void\n * @static\n */\n public static function aliasInclude($path, $alias = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->aliasInclude($path, $alias);\n }\n\n /**\n * Register a handler for custom directives, binding the handler to the compiler.\n *\n * @param string $name\n * @param callable $handler\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function bindDirective($name, $handler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->bindDirective($name, $handler);\n }\n\n /**\n * Register a handler for custom directives.\n *\n * @param string $name\n * @param callable $handler\n * @param bool $bind\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function directive($name, $handler, $bind = false)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->directive($name, $handler, $bind);\n }\n\n /**\n * Get the list of custom directives.\n *\n * @return array\n * @static\n */\n public static function getCustomDirectives()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getCustomDirectives();\n }\n\n /**\n * Indicate that the following callable should be used to prepare strings for compilation.\n *\n * @param callable $callback\n * @return \\Illuminate\\View\\Compilers\\BladeCompiler\n * @static\n */\n public static function prepareStringsForCompilationUsing($callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->prepareStringsForCompilationUsing($callback);\n }\n\n /**\n * Register a new precompiler.\n *\n * @param callable $precompiler\n * @return void\n * @static\n */\n public static function precompiler($precompiler)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->precompiler($precompiler);\n }\n\n /**\n * Execute the given callback using a custom echo format.\n *\n * @param string $format\n * @param callable $callback\n * @return string\n * @static\n */\n public static function usingEchoFormat($format, $callback)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->usingEchoFormat($format, $callback);\n }\n\n /**\n * Set the echo format to be used by the compiler.\n *\n * @param string $format\n * @return void\n * @static\n */\n public static function setEchoFormat($format)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->setEchoFormat($format);\n }\n\n /**\n * Set the \"echo\" format to double encode entities.\n *\n * @return void\n * @static\n */\n public static function withDoubleEncoding()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withDoubleEncoding();\n }\n\n /**\n * Set the \"echo\" format to not double encode entities.\n *\n * @return void\n * @static\n */\n public static function withoutDoubleEncoding()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withoutDoubleEncoding();\n }\n\n /**\n * Indicate that component tags should not be compiled.\n *\n * @return void\n * @static\n */\n public static function withoutComponentTags()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->withoutComponentTags();\n }\n\n /**\n * Get the path to the compiled version of a view.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function getCompiledPath($path)\n {\n //Method inherited from \\Illuminate\\View\\Compilers\\Compiler \n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->getCompiledPath($path);\n }\n\n /**\n * Determine if the view at the given path is expired.\n *\n * @param string $path\n * @return bool\n * @throws \\ErrorException\n * @static\n */\n public static function isExpired($path)\n {\n //Method inherited from \\Illuminate\\View\\Compilers\\Compiler \n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->isExpired($path);\n }\n\n /**\n * Get a new component hash for a component name.\n *\n * @param string $component\n * @return string\n * @static\n */\n public static function newComponentHash($component)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::newComponentHash($component);\n }\n\n /**\n * Compile a class component opening.\n *\n * @param string $component\n * @param string $alias\n * @param string $data\n * @param string $hash\n * @return string\n * @static\n */\n public static function compileClassComponentOpening($component, $alias, $data, $hash)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::compileClassComponentOpening($component, $alias, $data, $hash);\n }\n\n /**\n * Compile the end-component statements into valid PHP.\n *\n * @return string\n * @static\n */\n public static function compileEndComponentClass()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEndComponentClass();\n }\n\n /**\n * Sanitize the given component attribute value.\n *\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function sanitizeComponentAttribute($value)\n {\n return \\Illuminate\\View\\Compilers\\BladeCompiler::sanitizeComponentAttribute($value);\n }\n\n /**\n * Compile an end-once block into valid PHP.\n *\n * @return string\n * @static\n */\n public static function compileEndOnce()\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEndOnce();\n }\n\n /**\n * Add a handler to be executed before echoing a given class.\n *\n * @param string|callable $class\n * @param callable|null $handler\n * @return void\n * @static\n */\n public static function stringable($class, $handler = null)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n $instance->stringable($class, $handler);\n }\n\n /**\n * Compile Blade echos into valid PHP.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function compileEchos($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->compileEchos($value);\n }\n\n /**\n * Apply the echo handler for the value if it exists.\n *\n * @param string $value\n * @return string\n * @static\n */\n public static function applyEchoHandler($value)\n {\n /** @var \\Illuminate\\View\\Compilers\\BladeCompiler $instance */\n return $instance->applyEchoHandler($value);\n }\n\n }\n /**\n * @method static mixed auth(\\Illuminate\\Http\\Request $request)\n * @method static mixed validAuthenticationResponse(\\Illuminate\\Http\\Request $request, mixed $result)\n * @method static void broadcast(array $channels, string $event, array $payload = [])\n * @method static array|null resolveAuthenticatedUser(\\Illuminate\\Http\\Request $request)\n * @method static void resolveAuthenticatedUserUsing(\\Closure $callback)\n * @method static \\Illuminate\\Broadcasting\\Broadcasters\\Broadcaster channel(\\Illuminate\\Contracts\\Broadcasting\\HasBroadcastChannel|string $channel, callable|string $callback, array $options = [])\n * @method static \\Illuminate\\Support\\Collection getChannels()\n * @see \\Illuminate\\Broadcasting\\BroadcastManager\n * @see \\Illuminate\\Broadcasting\\Broadcasters\\Broadcaster\n */\n class Broadcast {\n /**\n * Register the routes for handling broadcast channel authentication and sockets.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function routes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->routes($attributes);\n }\n\n /**\n * Register the routes for handling broadcast user authentication.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function userRoutes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->userRoutes($attributes);\n }\n\n /**\n * Register the routes for handling broadcast authentication and sockets.\n * \n * Alias of \"routes\" method.\n *\n * @param array|null $attributes\n * @return void\n * @static\n */\n public static function channelRoutes($attributes = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->channelRoutes($attributes);\n }\n\n /**\n * Get the socket ID for the given request.\n *\n * @param \\Illuminate\\Http\\Request|null $request\n * @return string|null\n * @static\n */\n public static function socket($request = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->socket($request);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given channels.\n *\n * @static\n */\n public static function on($channels)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->on($channels);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given private channels.\n *\n * @static\n */\n public static function private($channel)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->private($channel);\n }\n\n /**\n * Begin sending an anonymous broadcast to the given presence channels.\n *\n * @static\n */\n public static function presence($channel)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->presence($channel);\n }\n\n /**\n * Begin broadcasting an event.\n *\n * @param mixed $event\n * @return \\Illuminate\\Broadcasting\\PendingBroadcast\n * @static\n */\n public static function event($event = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->event($event);\n }\n\n /**\n * Queue the given event for broadcast.\n *\n * @param mixed $event\n * @return void\n * @static\n */\n public static function queue($event)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->queue($event);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @static\n */\n public static function connection($driver = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->connection($driver);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function driver($name = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->driver($name);\n }\n\n /**\n * Get a Pusher instance for the given configuration.\n *\n * @param array $config\n * @return \\Pusher\\Pusher\n * @static\n */\n public static function pusher($config)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->pusher($config);\n }\n\n /**\n * Get an Ably instance for the given configuration.\n *\n * @param array $config\n * @return \\Ably\\AblyRest\n * @static\n */\n public static function ably($config)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->ably($config);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Disconnect the given disk and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Broadcasting\\BroadcastManager\n * @static\n */\n public static function forgetDrivers()\n {\n /** @var \\Illuminate\\Broadcasting\\BroadcastManager $instance */\n return $instance->forgetDrivers();\n }\n\n }\n /**\n * @see \\Illuminate\\Bus\\Dispatcher\n * @see \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n */\n class Bus {\n /**\n * Dispatch a command to its appropriate handler.\n *\n * @param mixed $command\n * @return mixed\n * @static\n */\n public static function dispatch($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatch($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler in the current process.\n * \n * Queueable jobs will be dispatched to the \"sync\" queue.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return mixed\n * @static\n */\n public static function dispatchSync($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchSync($command, $handler);\n }\n\n /**\n * Dispatch a command to its appropriate handler in the current process without using the synchronous queue.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return mixed\n * @static\n */\n public static function dispatchNow($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchNow($command, $handler);\n }\n\n /**\n * Attempt to find the batch with the given ID.\n *\n * @param string $batchId\n * @return \\Illuminate\\Bus\\Batch|null\n * @static\n */\n public static function findBatch($batchId)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->findBatch($batchId);\n }\n\n /**\n * Create a new batch of queueable jobs.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $jobs\n * @return \\Illuminate\\Bus\\PendingBatch\n * @static\n */\n public static function batch($jobs)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->batch($jobs);\n }\n\n /**\n * Create a new chain of queueable jobs.\n *\n * @param \\Illuminate\\Support\\Collection|array|null $jobs\n * @return \\Illuminate\\Foundation\\Bus\\PendingChain\n * @static\n */\n public static function chain($jobs = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->chain($jobs);\n }\n\n /**\n * Determine if the given command has a handler.\n *\n * @param mixed $command\n * @return bool\n * @static\n */\n public static function hasCommandHandler($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->hasCommandHandler($command);\n }\n\n /**\n * Retrieve the handler for a command.\n *\n * @param mixed $command\n * @return mixed\n * @static\n */\n public static function getCommandHandler($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->getCommandHandler($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler behind a queue.\n *\n * @param mixed $command\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function dispatchToQueue($command)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->dispatchToQueue($command);\n }\n\n /**\n * Dispatch a command to its appropriate handler after the current process.\n *\n * @param mixed $command\n * @param mixed $handler\n * @return void\n * @static\n */\n public static function dispatchAfterResponse($command, $handler = null)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n $instance->dispatchAfterResponse($command, $handler);\n }\n\n /**\n * Set the pipes through which commands should be piped before dispatching.\n *\n * @param array $pipes\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function pipeThrough($pipes)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->pipeThrough($pipes);\n }\n\n /**\n * Map a command to a handler.\n *\n * @param array $map\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function map($map)\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->map($map);\n }\n\n /**\n * Allow dispatching after responses.\n *\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function withDispatchingAfterResponses()\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->withDispatchingAfterResponses();\n }\n\n /**\n * Disable dispatching after responses.\n *\n * @return \\Illuminate\\Bus\\Dispatcher\n * @static\n */\n public static function withoutDispatchingAfterResponses()\n {\n /** @var \\Illuminate\\Bus\\Dispatcher $instance */\n return $instance->withoutDispatchingAfterResponses();\n }\n\n /**\n * Specify the jobs that should be dispatched instead of faked.\n *\n * @param array|string $jobsToDispatch\n * @return \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n * @static\n */\n public static function except($jobsToDispatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->except($jobsToDispatch);\n }\n\n /**\n * Assert if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatched($command, $callback);\n }\n\n /**\n * Assert if a job was pushed exactly once.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedOnce($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedOnce($command);\n }\n\n /**\n * Assert if a job was pushed a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatched($command, $callback);\n }\n\n /**\n * Assert that no jobs were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingDispatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingDispatched();\n }\n\n /**\n * Assert if a job was explicitly dispatched synchronously based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedSync($command, $callback);\n }\n\n /**\n * Assert if a job was pushed synchronously a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedSyncTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedSyncTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatchedSync($command, $callback);\n }\n\n /**\n * Assert if a job was dispatched after the response was sent based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Assert if a job was pushed after the response was sent a number of times.\n *\n * @param string|\\Closure $command\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedAfterResponseTimes($command, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedAfterResponseTimes($command, $times);\n }\n\n /**\n * Determine if a job was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNotDispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Assert if a chain of jobs was dispatched.\n *\n * @param array $expectedChain\n * @return void\n * @static\n */\n public static function assertChained($expectedChain)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertChained($expectedChain);\n }\n\n /**\n * Assert no chained jobs was dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingChained()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingChained();\n }\n\n /**\n * Assert if a job was dispatched with an empty chain based on a truth-test callback.\n *\n * @param string|\\Closure $command\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertDispatchedWithoutChain($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertDispatchedWithoutChain($command, $callback);\n }\n\n /**\n * Create a new assertion about a chained batch.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Support\\Testing\\Fakes\\ChainedBatchTruthTest\n * @static\n */\n public static function chainedBatch($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->chainedBatch($callback);\n }\n\n /**\n * Assert if a batch was dispatched based on a truth-test callback.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function assertBatched($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertBatched($callback);\n }\n\n /**\n * Assert the number of batches that have been dispatched.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertBatchCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertBatchCount($count);\n }\n\n /**\n * Assert that no batched jobs were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingBatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingBatched();\n }\n\n /**\n * Assert that no jobs were dispatched, chained, or batched.\n *\n * @return void\n * @static\n */\n public static function assertNothingPlaced()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n $instance->assertNothingPlaced();\n }\n\n /**\n * Get all of the jobs matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatched($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatched($command, $callback);\n }\n\n /**\n * Get all of the jobs dispatched synchronously matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatchedSync($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedSync($command, $callback);\n }\n\n /**\n * Get all of the jobs dispatched after the response was sent matching a truth-test callback.\n *\n * @param string $command\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatchedAfterResponse($command, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedAfterResponse($command, $callback);\n }\n\n /**\n * Get all of the pending batches matching a truth-test callback.\n *\n * @param callable $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function batched($callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->batched($callback);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatched($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatched($command);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatchedSync($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatchedSync($command);\n }\n\n /**\n * Determine if there are any stored commands for a given class.\n *\n * @param string $command\n * @return bool\n * @static\n */\n public static function hasDispatchedAfterResponse($command)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->hasDispatchedAfterResponse($command);\n }\n\n /**\n * Dispatch an empty job batch for testing.\n *\n * @param string $name\n * @return \\Illuminate\\Bus\\Batch\n * @static\n */\n public static function dispatchFakeBatch($name = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchFakeBatch($name);\n }\n\n /**\n * Record the fake pending batch dispatch.\n *\n * @param \\Illuminate\\Bus\\PendingBatch $pendingBatch\n * @return \\Illuminate\\Bus\\Batch\n * @static\n */\n public static function recordPendingBatch($pendingBatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->recordPendingBatch($pendingBatch);\n }\n\n /**\n * Specify if commands should be serialized and restored when being batched.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\BusFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the batches that have been dispatched.\n *\n * @return array\n * @static\n */\n public static function dispatchedBatches()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\BusFake $instance */\n return $instance->dispatchedBatches();\n }\n\n }\n /**\n * @see \\Illuminate\\Cache\\CacheManager\n * @see \\Illuminate\\Cache\\Repository\n */\n class Cache {\n /**\n * Get a cache store instance by name, wrapped in a repository.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function store($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->store($name);\n }\n\n /**\n * Get a cache driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Get a memoized cache driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function memo($driver = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->memo($driver);\n }\n\n /**\n * Resolve the given store.\n *\n * @param string $name\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function resolve($name)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->resolve($name);\n }\n\n /**\n * Build a cache repository with the given configuration.\n *\n * @param array $config\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new cache repository with the given implementation.\n *\n * @param \\Illuminate\\Contracts\\Cache\\Store $store\n * @param array $config\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function repository($store, $config = [])\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->repository($store, $config);\n }\n\n /**\n * Re-set the event dispatcher on all resolved cache repositories.\n *\n * @return void\n * @static\n */\n public static function refreshEventDispatcher()\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->refreshEventDispatcher();\n }\n\n /**\n * Get the default cache driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default cache driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Unset the given driver instances.\n *\n * @param array|string|null $name\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function forgetDriver($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->forgetDriver($name);\n }\n\n /**\n * Disconnect the given driver and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Cache\\CacheManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Cache\\CacheManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Determine if an item exists in the cache.\n *\n * @param array|string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if an item doesn't exist in the cache.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->missing($key);\n }\n\n /**\n * Retrieve an item from the cache by key.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Retrieve multiple items from the cache by key.\n * \n * Items not found in the cache will have a null value.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function many($keys)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->many($keys);\n }\n\n /**\n * Obtains multiple cache items by their unique keys.\n *\n * @return iterable\n * @param iterable<string> $keys A list of keys that can be obtained in a single operation.\n * @param mixed $default Default value to return for keys that do not exist.\n * @return iterable<string, mixed> A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $keys is neither an array nor a Traversable,\n * or if any of the $keys are not a legal value.\n * @static\n */\n public static function getMultiple($keys, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getMultiple($keys, $default);\n }\n\n /**\n * Retrieve an item from the cache and delete it.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Store an item in the cache.\n *\n * @param array|string $key\n * @param mixed $value\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function put($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->put($key, $value, $ttl);\n }\n\n /**\n * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.\n *\n * @return bool\n * @param string $key The key of the item to store.\n * @param mixed $value The value of the item to store, must be serializable.\n * @param null|int|\\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and\n * the driver supports TTL then the library may set a default value\n * for it or let the driver take care of that.\n * @return bool True on success and false on failure.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if the $key string is not a legal value.\n * @static\n */\n public static function set($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->set($key, $value, $ttl);\n }\n\n /**\n * Store multiple items in the cache for a given number of seconds.\n *\n * @param array $values\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function putMany($values, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->putMany($values, $ttl);\n }\n\n /**\n * Persists a set of key => value pairs in the cache, with an optional TTL.\n *\n * @return bool\n * @param iterable $values A list of key => value pairs for a multiple-set operation.\n * @param null|int|\\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and\n * the driver supports TTL then the library may set a default value\n * for it or let the driver take care of that.\n * @return bool True on success and false on failure.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $values is neither an array nor a Traversable,\n * or if any of the $values are not a legal value.\n * @static\n */\n public static function setMultiple($values, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setMultiple($values, $ttl);\n }\n\n /**\n * Store an item in the cache if the key does not exist.\n *\n * @param string $key\n * @param mixed $value\n * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n * @return bool\n * @static\n */\n public static function add($key, $value, $ttl = null)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->add($key, $value, $ttl);\n }\n\n /**\n * Increment the value of an item in the cache.\n *\n * @param string $key\n * @param mixed $value\n * @return int|bool\n * @static\n */\n public static function increment($key, $value = 1)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->increment($key, $value);\n }\n\n /**\n * Decrement the value of an item in the cache.\n *\n * @param string $key\n * @param mixed $value\n * @return int|bool\n * @static\n */\n public static function decrement($key, $value = 1)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->decrement($key, $value);\n }\n\n /**\n * Store an item in the cache indefinitely.\n *\n * @param string $key\n * @param mixed $value\n * @return bool\n * @static\n */\n public static function forever($key, $value)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->forever($key, $value);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure|\\DateTimeInterface|\\DateInterval|int|null $ttl\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function remember($key, $ttl, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->remember($key, $ttl, $callback);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result forever.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function sear($key, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->sear($key, $callback);\n }\n\n /**\n * Get an item from the cache, or execute the given Closure and store the result forever.\n *\n * @template TCacheValue\n * @param string $key\n * @param \\Closure(): TCacheValue $callback\n * @return TCacheValue\n * @static\n */\n public static function rememberForever($key, $callback)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->rememberForever($key, $callback);\n }\n\n /**\n * Retrieve an item from the cache by key, refreshing it in the background if it is stale.\n *\n * @template TCacheValue\n * @param string $key\n * @param array{ 0: \\DateTimeInterface|\\DateInterval|int, 1: \\DateTimeInterface|\\DateInterval|int } $ttl\n * @param (callable(): TCacheValue) $callback\n * @param array{ seconds?: int, owner?: string }|null $lock\n * @param bool $alwaysDefer\n * @return TCacheValue\n * @static\n */\n public static function flexible($key, $ttl, $callback, $lock = null, $alwaysDefer = false)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->flexible($key, $ttl, $callback, $lock, $alwaysDefer);\n }\n\n /**\n * Remove an item from the cache.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function forget($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->forget($key);\n }\n\n /**\n * Delete an item from the cache by its unique key.\n *\n * @return bool\n * @param string $key The unique cache key of the item to delete.\n * @return bool True if the item was successfully removed. False if there was an error.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if the $key string is not a legal value.\n * @static\n */\n public static function delete($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->delete($key);\n }\n\n /**\n * Deletes multiple cache items in a single operation.\n *\n * @return bool\n * @param iterable<string> $keys A list of string-based keys to be deleted.\n * @return bool True if the items were successfully removed. False if there was an error.\n * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n * MUST be thrown if $keys is neither an array nor a Traversable,\n * or if any of the $keys are not a legal value.\n * @static\n */\n public static function deleteMultiple($keys)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->deleteMultiple($keys);\n }\n\n /**\n * Wipes clean the entire cache's keys.\n *\n * @return bool\n * @return bool True on success and false on failure.\n * @static\n */\n public static function clear()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->clear();\n }\n\n /**\n * Begin executing a new tags operation if the store supports it.\n *\n * @param mixed $names\n * @return \\Illuminate\\Cache\\TaggedCache\n * @throws \\BadMethodCallException\n * @static\n */\n public static function tags($names)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->tags($names);\n }\n\n /**\n * Get the name of the cache store.\n *\n * @return string|null\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getName();\n }\n\n /**\n * Determine if the current store supports tags.\n *\n * @return bool\n * @static\n */\n public static function supportsTags()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->supportsTags();\n }\n\n /**\n * Get the default cache time.\n *\n * @return int|null\n * @static\n */\n public static function getDefaultCacheTime()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getDefaultCacheTime();\n }\n\n /**\n * Set the default cache time in seconds.\n *\n * @param int|null $seconds\n * @return \\Illuminate\\Cache\\Repository\n * @static\n */\n public static function setDefaultCacheTime($seconds)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setDefaultCacheTime($seconds);\n }\n\n /**\n * Get the cache store implementation.\n *\n * @return \\Illuminate\\Contracts\\Cache\\Store\n * @static\n */\n public static function getStore()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getStore();\n }\n\n /**\n * Set the cache store implementation.\n *\n * @param \\Illuminate\\Contracts\\Cache\\Store $store\n * @return static\n * @static\n */\n public static function setStore($store)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->setStore($store);\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher|null\n * @static\n */\n public static function getEventDispatcher()\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->getEventDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setEventDispatcher($events)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->setEventDispatcher($events);\n }\n\n /**\n * Determine if a cached value exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Retrieve an item from the cache by key.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Store an item in the cache for the default time.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Remove an item from the cache.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Cache\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Cache\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Cache\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Cache\\Repository::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Cache\\Repository $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Get a lock instance.\n *\n * @param string $name\n * @param int $seconds\n * @param string|null $owner\n * @return \\Illuminate\\Contracts\\Cache\\Lock\n * @static\n */\n public static function lock($name, $seconds = 0, $owner = null)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->lock($name, $seconds, $owner);\n }\n\n /**\n * Restore a lock instance using the owner identifier.\n *\n * @param string $name\n * @param string $owner\n * @return \\Illuminate\\Contracts\\Cache\\Lock\n * @static\n */\n public static function restoreLock($name, $owner)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->restoreLock($name, $owner);\n }\n\n /**\n * Remove all items from the cache.\n *\n * @return bool\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->flush();\n }\n\n /**\n * Remove all expired tag set entries.\n *\n * @return void\n * @static\n */\n public static function flushStaleTags()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->flushStaleTags();\n }\n\n /**\n * Get the Redis connection instance.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function connection()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->connection();\n }\n\n /**\n * Get the Redis connection instance that should be used to manage locks.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function lockConnection()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->lockConnection();\n }\n\n /**\n * Specify the name of the connection that should be used to store data.\n *\n * @param string $connection\n * @return void\n * @static\n */\n public static function setConnection($connection)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->setConnection($connection);\n }\n\n /**\n * Specify the name of the connection that should be used to manage locks.\n *\n * @param string $connection\n * @return \\Illuminate\\Cache\\RedisStore\n * @static\n */\n public static function setLockConnection($connection)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->setLockConnection($connection);\n }\n\n /**\n * Get the Redis database instance.\n *\n * @return \\Illuminate\\Contracts\\Redis\\Factory\n * @static\n */\n public static function getRedis()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->getRedis();\n }\n\n /**\n * Get the cache key prefix.\n *\n * @return string\n * @static\n */\n public static function getPrefix()\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n return $instance->getPrefix();\n }\n\n /**\n * Set the cache key prefix.\n *\n * @param string $prefix\n * @return void\n * @static\n */\n public static function setPrefix($prefix)\n {\n /** @var \\Illuminate\\Cache\\RedisStore $instance */\n $instance->setPrefix($prefix);\n }\n\n }\n /**\n * @method static array run(\\Closure|array $tasks)\n * @method static \\Illuminate\\Support\\Defer\\DeferredCallback defer(\\Closure|array $tasks)\n * @see \\Illuminate\\Concurrency\\ConcurrencyManager\n */\n class Concurrency {\n /**\n * Get a driver instance by name.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function driver($name = null)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->driver($name);\n }\n\n /**\n * Create an instance of the process concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\ProcessDriver\n * @static\n */\n public static function createProcessDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createProcessDriver($config);\n }\n\n /**\n * Create an instance of the fork concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\ForkDriver\n * @throws \\RuntimeException\n * @static\n */\n public static function createForkDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createForkDriver($config);\n }\n\n /**\n * Create an instance of the sync concurrency driver.\n *\n * @param array $config\n * @return \\Illuminate\\Concurrency\\SyncDriver\n * @static\n */\n public static function createSyncDriver($config)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->createSyncDriver($config);\n }\n\n /**\n * Get the default instance name.\n *\n * @return string\n * @static\n */\n public static function getDefaultInstance()\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->getDefaultInstance();\n }\n\n /**\n * Set the default instance name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultInstance($name)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n $instance->setDefaultInstance($name);\n }\n\n /**\n * Get the instance specific configuration.\n *\n * @param string $name\n * @return array\n * @static\n */\n public static function getInstanceConfig($name)\n {\n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->getInstanceConfig($name);\n }\n\n /**\n * Get an instance by name.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function instance($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->instance($name);\n }\n\n /**\n * Unset the given instances.\n *\n * @param array|string|null $name\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function forgetInstance($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->forgetInstance($name);\n }\n\n /**\n * Disconnect the given instance and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom instance creator Closure.\n *\n * @param string $name\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function extend($name, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->extend($name, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Concurrency\\ConcurrencyManager\n * @static\n */\n public static function setApplication($app)\n {\n //Method inherited from \\Illuminate\\Support\\MultipleInstanceManager \n /** @var \\Illuminate\\Concurrency\\ConcurrencyManager $instance */\n return $instance->setApplication($app);\n }\n\n }\n /**\n * @see \\Illuminate\\Config\\Repository\n */\n class Config {\n /**\n * Determine if the given configuration value exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Get the specified configuration value.\n *\n * @param array|string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get many configuration values.\n *\n * @param array<string|int,mixed> $keys\n * @return array<string,mixed>\n * @static\n */\n public static function getMany($keys)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->getMany($keys);\n }\n\n /**\n * Get the specified string configuration value.\n *\n * @param string $key\n * @param (\\Closure():(string|null))|string|null $default\n * @return string\n * @static\n */\n public static function string($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->string($key, $default);\n }\n\n /**\n * Get the specified integer configuration value.\n *\n * @param string $key\n * @param (\\Closure():(int|null))|int|null $default\n * @return int\n * @static\n */\n public static function integer($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->integer($key, $default);\n }\n\n /**\n * Get the specified float configuration value.\n *\n * @param string $key\n * @param (\\Closure():(float|null))|float|null $default\n * @return float\n * @static\n */\n public static function float($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->float($key, $default);\n }\n\n /**\n * Get the specified boolean configuration value.\n *\n * @param string $key\n * @param (\\Closure():(bool|null))|bool|null $default\n * @return bool\n * @static\n */\n public static function boolean($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->boolean($key, $default);\n }\n\n /**\n * Get the specified array configuration value.\n *\n * @param string $key\n * @param (\\Closure():(array<array-key, mixed>|null))|array<array-key, mixed>|null $default\n * @return array<array-key, mixed>\n * @static\n */\n public static function array($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->array($key, $default);\n }\n\n /**\n * Get the specified array configuration value as a collection.\n *\n * @param string $key\n * @param (\\Closure():(array<array-key, mixed>|null))|array<array-key, mixed>|null $default\n * @return Collection<array-key, mixed>\n * @static\n */\n public static function collection($key, $default = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->collection($key, $default);\n }\n\n /**\n * Set a given configuration value.\n *\n * @param array|string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function set($key, $value = null)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->set($key, $value);\n }\n\n /**\n * Prepend a value onto an array configuration value.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function prepend($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->prepend($key, $value);\n }\n\n /**\n * Push a value onto an array configuration value.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function push($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->push($key, $value);\n }\n\n /**\n * Get all of the configuration items for the application.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->all();\n }\n\n /**\n * Determine if the given configuration option exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function offsetExists($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * Get a configuration option.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function offsetGet($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * Set a configuration option.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($key, $value)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->offsetSet($key, $value);\n }\n\n /**\n * Unset a configuration option.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function offsetUnset($key)\n {\n /** @var \\Illuminate\\Config\\Repository $instance */\n $instance->offsetUnset($key);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Config\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Config\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Config\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Config\\Repository::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Log\\Context\\Repository\n */\n class Context {\n /**\n * Determine if the given key exists.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if the given key is missing.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->missing($key);\n }\n\n /**\n * Determine if the given key exists within the hidden context data.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hasHidden($key);\n }\n\n /**\n * Determine if the given key is missing within the hidden context data.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function missingHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->missingHidden($key);\n }\n\n /**\n * Retrieve all the context data.\n *\n * @return array<string, mixed>\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->all();\n }\n\n /**\n * Retrieve all the hidden context data.\n *\n * @return array<string, mixed>\n * @static\n */\n public static function allHidden()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->allHidden();\n }\n\n /**\n * Retrieve the given key's value.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Retrieve the given key's hidden value.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getHidden($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->getHidden($key, $default);\n }\n\n /**\n * Retrieve the given key's value and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Retrieve the given key's hidden value and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pullHidden($key, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pullHidden($key, $default);\n }\n\n /**\n * Retrieve only the values of the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->only($keys);\n }\n\n /**\n * Retrieve only the hidden values of the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function onlyHidden($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->onlyHidden($keys);\n }\n\n /**\n * Retrieve all values except those with the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->except($keys);\n }\n\n /**\n * Retrieve all hidden values except those with the given keys.\n *\n * @param array<int, string> $keys\n * @return array<string, mixed>\n * @static\n */\n public static function exceptHidden($keys)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->exceptHidden($keys);\n }\n\n /**\n * Add a context value.\n *\n * @param string|array<string, mixed> $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function add($key, $value = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->add($key, $value);\n }\n\n /**\n * Add a hidden context value.\n *\n * @param string|array<string, mixed> $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addHidden($key, $value = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addHidden($key, $value);\n }\n\n /**\n * Add a context value if it does not exist yet, and return the value.\n *\n * @param string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function remember($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->remember($key, $value);\n }\n\n /**\n * Add a hidden context value if it does not exist yet, and return the value.\n *\n * @param string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function rememberHidden($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->rememberHidden($key, $value);\n }\n\n /**\n * Forget the given context key.\n *\n * @param string|array<int, string> $key\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function forget($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->forget($key);\n }\n\n /**\n * Forget the given hidden context key.\n *\n * @param string|array<int, string> $key\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function forgetHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->forgetHidden($key);\n }\n\n /**\n * Add a context value if it does not exist yet.\n *\n * @param string $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addIf($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addIf($key, $value);\n }\n\n /**\n * Add a hidden context value if it does not exist yet.\n *\n * @param string $key\n * @param mixed $value\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function addHiddenIf($key, $value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->addHiddenIf($key, $value);\n }\n\n /**\n * Push the given values onto the key's stack.\n *\n * @param string $key\n * @param mixed $values\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function push($key, ...$values)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->push($key, ...$values);\n }\n\n /**\n * Pop the latest value from the key's stack.\n *\n * @param string $key\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function pop($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pop($key);\n }\n\n /**\n * Push the given hidden values onto the key's stack.\n *\n * @param string $key\n * @param mixed $values\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function pushHidden($key, ...$values)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->pushHidden($key, ...$values);\n }\n\n /**\n * Pop the latest hidden value from the key's stack.\n *\n * @param string $key\n * @return mixed\n * @throws \\RuntimeException\n * @static\n */\n public static function popHidden($key)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->popHidden($key);\n }\n\n /**\n * Increment a context counter.\n *\n * @param string $key\n * @param int $amount\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function increment($key, $amount = 1)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->increment($key, $amount);\n }\n\n /**\n * Decrement a context counter.\n *\n * @param string $key\n * @param int $amount\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function decrement($key, $amount = 1)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->decrement($key, $amount);\n }\n\n /**\n * Determine if the given value is in the given stack.\n *\n * @param string $key\n * @param mixed $value\n * @param bool $strict\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function stackContains($key, $value, $strict = false)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->stackContains($key, $value, $strict);\n }\n\n /**\n * Determine if the given value is in the given hidden stack.\n *\n * @param string $key\n * @param mixed $value\n * @param bool $strict\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function hiddenStackContains($key, $value, $strict = false)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hiddenStackContains($key, $value, $strict);\n }\n\n /**\n * Run the callback function with the given context values and restore the original context state when complete.\n *\n * @param callable $callback\n * @param array<string, mixed> $data\n * @param array<string, mixed> $hidden\n * @return mixed\n * @throws \\Throwable\n * @static\n */\n public static function scope($callback, $data = [], $hidden = [])\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->scope($callback, $data, $hidden);\n }\n\n /**\n * Determine if the repository is empty.\n *\n * @return bool\n * @static\n */\n public static function isEmpty()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->isEmpty();\n }\n\n /**\n * Execute the given callback when context is about to be dehydrated.\n *\n * @param callable $callback\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function dehydrating($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->dehydrating($callback);\n }\n\n /**\n * Execute the given callback when context has been hydrated.\n *\n * @param callable $callback\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function hydrated($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hydrated($callback);\n }\n\n /**\n * Handle unserialize exceptions using the given callback.\n *\n * @param callable|null $callback\n * @return static\n * @static\n */\n public static function handleUnserializeExceptionsUsing($callback)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->handleUnserializeExceptionsUsing($callback);\n }\n\n /**\n * Flush all context data.\n *\n * @return \\Illuminate\\Log\\Context\\Repository\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->flush();\n }\n\n /**\n * Dehydrate the context data.\n *\n * @internal\n * @return \\Illuminate\\Log\\Context\\?array\n * @static\n */\n public static function dehydrate()\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->dehydrate();\n }\n\n /**\n * Hydrate the context instance.\n *\n * @internal\n * @param \\Illuminate\\Log\\Context\\?array $context\n * @return \\Illuminate\\Log\\Context\\Repository\n * @throws \\RuntimeException\n * @static\n */\n public static function hydrate($context)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->hydrate($context);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Log\\Context\\Repository::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Log\\Context\\Repository::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Log\\Context\\Repository::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Log\\Context\\Repository::flushMacros();\n }\n\n /**\n * Restore the model from the model identifier instance.\n *\n * @param \\Illuminate\\Contracts\\Database\\ModelIdentifier $value\n * @return \\Illuminate\\Database\\Eloquent\\Model\n * @static\n */\n public static function restoreModel($value)\n {\n /** @var \\Illuminate\\Log\\Context\\Repository $instance */\n return $instance->restoreModel($value);\n }\n\n }\n /**\n * @see \\Illuminate\\Cookie\\CookieJar\n */\n class Cookie {\n /**\n * Create a new cookie instance.\n *\n * @param string $name\n * @param string $value\n * @param int $minutes\n * @param string|null $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param bool $httpOnly\n * @param bool $raw\n * @param string|null $sameSite\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->make($name, $value, $minutes, $path, $domain, $secure, $httpOnly, $raw, $sameSite);\n }\n\n /**\n * Create a cookie that lasts \"forever\" (400 days).\n *\n * @param string $name\n * @param string $value\n * @param string|null $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param bool $httpOnly\n * @param bool $raw\n * @param string|null $sameSite\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function forever($name, $value, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->forever($name, $value, $path, $domain, $secure, $httpOnly, $raw, $sameSite);\n }\n\n /**\n * Expire the given cookie.\n *\n * @param string $name\n * @param string|null $path\n * @param string|null $domain\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n * @static\n */\n public static function forget($name, $path = null, $domain = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->forget($name, $path, $domain);\n }\n\n /**\n * Determine if a cookie has been queued.\n *\n * @param string $key\n * @param string|null $path\n * @return bool\n * @static\n */\n public static function hasQueued($key, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->hasQueued($key, $path);\n }\n\n /**\n * Get a queued cookie instance.\n *\n * @param string $key\n * @param mixed $default\n * @param string|null $path\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie|null\n * @static\n */\n public static function queued($key, $default = null, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->queued($key, $default, $path);\n }\n\n /**\n * Queue a cookie to send with the next response.\n *\n * @param mixed $parameters\n * @return void\n * @static\n */\n public static function queue(...$parameters)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->queue(...$parameters);\n }\n\n /**\n * Queue a cookie to expire with the next response.\n *\n * @param string $name\n * @param string|null $path\n * @param string|null $domain\n * @return void\n * @static\n */\n public static function expire($name, $path = null, $domain = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->expire($name, $path, $domain);\n }\n\n /**\n * Remove a cookie from the queue.\n *\n * @param string $name\n * @param string|null $path\n * @return void\n * @static\n */\n public static function unqueue($name, $path = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n $instance->unqueue($name, $path);\n }\n\n /**\n * Set the default path and domain for the jar.\n *\n * @param string $path\n * @param string|null $domain\n * @param bool|null $secure\n * @param string|null $sameSite\n * @return \\Illuminate\\Cookie\\CookieJar\n * @static\n */\n public static function setDefaultPathAndDomain($path, $domain, $secure = false, $sameSite = null)\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->setDefaultPathAndDomain($path, $domain, $secure, $sameSite);\n }\n\n /**\n * Get the cookies which have been queued for the next request.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\Cookie[]\n * @static\n */\n public static function getQueuedCookies()\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->getQueuedCookies();\n }\n\n /**\n * Flush the cookies which have been queued for the next request.\n *\n * @return \\Illuminate\\Cookie\\CookieJar\n * @static\n */\n public static function flushQueuedCookies()\n {\n /** @var \\Illuminate\\Cookie\\CookieJar $instance */\n return $instance->flushQueuedCookies();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Cookie\\CookieJar::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Cookie\\CookieJar::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Cookie\\CookieJar::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Cookie\\CookieJar::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Encryption\\Encrypter\n */\n class Crypt {\n /**\n * Determine if the given key and cipher combination is valid.\n *\n * @param string $key\n * @param string $cipher\n * @return bool\n * @static\n */\n public static function supported($key, $cipher)\n {\n return \\Illuminate\\Encryption\\Encrypter::supported($key, $cipher);\n }\n\n /**\n * Create a new encryption key for the given cipher.\n *\n * @param string $cipher\n * @return string\n * @static\n */\n public static function generateKey($cipher)\n {\n return \\Illuminate\\Encryption\\Encrypter::generateKey($cipher);\n }\n\n /**\n * Encrypt the given value.\n *\n * @param mixed $value\n * @param bool $serialize\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n * @static\n */\n public static function encrypt($value, $serialize = true)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->encrypt($value, $serialize);\n }\n\n /**\n * Encrypt a string without serialization.\n *\n * @param string $value\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n * @static\n */\n public static function encryptString($value)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->encryptString($value);\n }\n\n /**\n * Decrypt the given value.\n *\n * @param string $payload\n * @param bool $unserialize\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n * @static\n */\n public static function decrypt($payload, $unserialize = true)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->decrypt($payload, $unserialize);\n }\n\n /**\n * Decrypt the given string without unserialization.\n *\n * @param string $payload\n * @return string\n * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n * @static\n */\n public static function decryptString($payload)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->decryptString($payload);\n }\n\n /**\n * Get the encryption key that the encrypter is currently using.\n *\n * @return string\n * @static\n */\n public static function getKey()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getKey();\n }\n\n /**\n * Get the current encryption key and all previous encryption keys.\n *\n * @return array\n * @static\n */\n public static function getAllKeys()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getAllKeys();\n }\n\n /**\n * Get the previous encryption keys.\n *\n * @return array\n * @static\n */\n public static function getPreviousKeys()\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->getPreviousKeys();\n }\n\n /**\n * Set the previous / legacy encryption keys that should be utilized if decryption fails.\n *\n * @param array $keys\n * @return \\Illuminate\\Encryption\\Encrypter\n * @static\n */\n public static function previousKeys($keys)\n {\n /** @var \\Illuminate\\Encryption\\Encrypter $instance */\n return $instance->previousKeys($keys);\n }\n\n }\n /**\n * @see \\Illuminate\\Database\\DatabaseManager\n */\n class DB {\n /**\n * Get a database connection instance.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Build a database connection instance from the given configuration.\n *\n * @param array $config\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Calculate the dynamic connection name for an on-demand connection based on its configuration.\n *\n * @param array $config\n * @return string\n * @static\n */\n public static function calculateDynamicConnectionName($config)\n {\n return \\Illuminate\\Database\\DatabaseManager::calculateDynamicConnectionName($config);\n }\n\n /**\n * Get a database connection instance from the given configuration.\n *\n * @param \\UnitEnum|string $name\n * @param array $config\n * @param bool $force\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function connectUsing($name, $config, $force = false)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->connectUsing($name, $config, $force);\n }\n\n /**\n * Disconnect from the given database and remove from local cache.\n *\n * @param \\UnitEnum|string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Disconnect from the given database.\n *\n * @param \\UnitEnum|string|null $name\n * @return void\n * @static\n */\n public static function disconnect($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->disconnect($name);\n }\n\n /**\n * Reconnect to the given database.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function reconnect($name = null)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->reconnect($name);\n }\n\n /**\n * Set the default database connection for the callback execution.\n *\n * @param \\UnitEnum|string $name\n * @param callable $callback\n * @return mixed\n * @static\n */\n public static function usingConnection($name, $callback)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->usingConnection($name, $callback);\n }\n\n /**\n * Get the default connection name.\n *\n * @return string\n * @static\n */\n public static function getDefaultConnection()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->getDefaultConnection();\n }\n\n /**\n * Set the default connection name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultConnection($name)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->setDefaultConnection($name);\n }\n\n /**\n * Get all of the supported drivers.\n *\n * @return string[]\n * @static\n */\n public static function supportedDrivers()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->supportedDrivers();\n }\n\n /**\n * Get all of the drivers that are actually available.\n *\n * @return string[]\n * @static\n */\n public static function availableDrivers()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->availableDrivers();\n }\n\n /**\n * Register an extension connection resolver.\n *\n * @param string $name\n * @param callable $resolver\n * @return void\n * @static\n */\n public static function extend($name, $resolver)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->extend($name, $resolver);\n }\n\n /**\n * Remove an extension connection resolver.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function forgetExtension($name)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->forgetExtension($name);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array<string, \\Illuminate\\Database\\Connection>\n * @static\n */\n public static function getConnections()\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->getConnections();\n }\n\n /**\n * Set the database reconnector callback.\n *\n * @param callable $reconnector\n * @return void\n * @static\n */\n public static function setReconnector($reconnector)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n $instance->setReconnector($reconnector);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Database\\DatabaseManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Database\\DatabaseManager::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Database\\DatabaseManager::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Database\\DatabaseManager::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Database\\DatabaseManager::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\DatabaseManager $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Get a human-readable name for the given connection driver.\n *\n * @return string\n * @static\n */\n public static function getDriverTitle()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDriverTitle();\n }\n\n /**\n * Determine if the connected database is a MariaDB database.\n *\n * @return bool\n * @static\n */\n public static function isMaria()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->isMaria();\n }\n\n /**\n * Get the server version for the connection.\n *\n * @return string\n * @static\n */\n public static function getServerVersion()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getServerVersion();\n }\n\n /**\n * Get a schema builder instance for the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\MariaDbBuilder\n * @static\n */\n public static function getSchemaBuilder()\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaBuilder();\n }\n\n /**\n * Get the schema state for the connection.\n *\n * @param \\Illuminate\\Filesystem\\Filesystem|null $files\n * @param callable|null $processFactory\n * @return \\Illuminate\\Database\\Schema\\MariaDbSchemaState\n * @static\n */\n public static function getSchemaState($files = null, $processFactory = null)\n {\n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaState($files, $processFactory);\n }\n\n /**\n * Run an insert statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @param string|null $sequence\n * @return bool\n * @static\n */\n public static function insert($query, $bindings = [], $sequence = null)\n {\n //Method inherited from \\Illuminate\\Database\\MySqlConnection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->insert($query, $bindings, $sequence);\n }\n\n /**\n * Get the connection's last insert ID.\n *\n * @return string|int|null\n * @static\n */\n public static function getLastInsertId()\n {\n //Method inherited from \\Illuminate\\Database\\MySqlConnection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getLastInsertId();\n }\n\n /**\n * Set the query grammar to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultQueryGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultQueryGrammar();\n }\n\n /**\n * Set the schema grammar to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultSchemaGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultSchemaGrammar();\n }\n\n /**\n * Set the query post processor to the default implementation.\n *\n * @return void\n * @static\n */\n public static function useDefaultPostProcessor()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->useDefaultPostProcessor();\n }\n\n /**\n * Begin a fluent query against a database table.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|\\UnitEnum|string $table\n * @param string|null $as\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function table($table, $as = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->table($table, $as);\n }\n\n /**\n * Get a new query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function query()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->query();\n }\n\n /**\n * Run a select statement and return a single result.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return mixed\n * @static\n */\n public static function selectOne($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectOne($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement and return the first column of the first row.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return mixed\n * @throws \\Illuminate\\Database\\MultipleColumnsSelectedException\n * @static\n */\n public static function scalar($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->scalar($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return array\n * @static\n */\n public static function selectFromWriteConnection($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectFromWriteConnection($query, $bindings);\n }\n\n /**\n * Run a select statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return array\n * @static\n */\n public static function select($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->select($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database and returns all of the result sets.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return array\n * @static\n */\n public static function selectResultSets($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->selectResultSets($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run a select statement against the database and returns a generator.\n *\n * @param string $query\n * @param array $bindings\n * @param bool $useReadPdo\n * @return \\Generator<int, \\stdClass>\n * @static\n */\n public static function cursor($query, $bindings = [], $useReadPdo = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->cursor($query, $bindings, $useReadPdo);\n }\n\n /**\n * Run an update statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function update($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->update($query, $bindings);\n }\n\n /**\n * Run a delete statement against the database.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function delete($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->delete($query, $bindings);\n }\n\n /**\n * Execute an SQL statement and return the boolean result.\n *\n * @param string $query\n * @param array $bindings\n * @return bool\n * @static\n */\n public static function statement($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->statement($query, $bindings);\n }\n\n /**\n * Run an SQL statement and get the number of rows affected.\n *\n * @param string $query\n * @param array $bindings\n * @return int\n * @static\n */\n public static function affectingStatement($query, $bindings = [])\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->affectingStatement($query, $bindings);\n }\n\n /**\n * Run a raw, unprepared query against the PDO connection.\n *\n * @param string $query\n * @return bool\n * @static\n */\n public static function unprepared($query)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->unprepared($query);\n }\n\n /**\n * Get the number of open connections for the database.\n *\n * @return int|null\n * @static\n */\n public static function threadCount()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->threadCount();\n }\n\n /**\n * Execute the given callback in \"dry run\" mode.\n *\n * @param (\\Closure(\\Illuminate\\Database\\Connection): mixed) $callback\n * @return \\Illuminate\\Database\\array{query: string, bindings: array, time: float|null}[]\n * @static\n */\n public static function pretend($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->pretend($callback);\n }\n\n /**\n * Execute the given callback without \"pretending\".\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutPretending($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->withoutPretending($callback);\n }\n\n /**\n * Bind values to their parameters in the given statement.\n *\n * @param \\PDOStatement $statement\n * @param array $bindings\n * @return void\n * @static\n */\n public static function bindValues($statement, $bindings)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->bindValues($statement, $bindings);\n }\n\n /**\n * Prepare the query bindings for execution.\n *\n * @param array $bindings\n * @return array\n * @static\n */\n public static function prepareBindings($bindings)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->prepareBindings($bindings);\n }\n\n /**\n * Log a query in the connection's query log.\n *\n * @param string $query\n * @param array $bindings\n * @param float|null $time\n * @return void\n * @static\n */\n public static function logQuery($query, $bindings, $time = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->logQuery($query, $bindings, $time);\n }\n\n /**\n * Register a callback to be invoked when the connection queries for longer than a given amount of time.\n *\n * @param \\DateTimeInterface|\\Carbon\\CarbonInterval|float|int $threshold\n * @param (callable(\\Illuminate\\Database\\Connection, \\Illuminate\\Database\\Events\\QueryExecuted): mixed) $handler\n * @return void\n * @static\n */\n public static function whenQueryingForLongerThan($threshold, $handler)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->whenQueryingForLongerThan($threshold, $handler);\n }\n\n /**\n * Allow all the query duration handlers to run again, even if they have already run.\n *\n * @return void\n * @static\n */\n public static function allowQueryDurationHandlersToRunAgain()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->allowQueryDurationHandlersToRunAgain();\n }\n\n /**\n * Get the duration of all run queries in milliseconds.\n *\n * @return float\n * @static\n */\n public static function totalQueryDuration()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->totalQueryDuration();\n }\n\n /**\n * Reset the duration of all run queries.\n *\n * @return void\n * @static\n */\n public static function resetTotalQueryDuration()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->resetTotalQueryDuration();\n }\n\n /**\n * Reconnect to the database if a PDO connection is missing.\n *\n * @return void\n * @static\n */\n public static function reconnectIfMissingConnection()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->reconnectIfMissingConnection();\n }\n\n /**\n * Register a hook to be run just before a database transaction is started.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function beforeStartingTransaction($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->beforeStartingTransaction($callback);\n }\n\n /**\n * Register a hook to be run just before a database query is executed.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function beforeExecuting($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->beforeExecuting($callback);\n }\n\n /**\n * Register a database query listener with the connection.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function listen($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->listen($callback);\n }\n\n /**\n * Get a new raw query expression.\n *\n * @param mixed $value\n * @return \\Illuminate\\Contracts\\Database\\Query\\Expression\n * @static\n */\n public static function raw($value)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->raw($value);\n }\n\n /**\n * Escape a value for safe SQL embedding.\n *\n * @param string|float|int|bool|null $value\n * @param bool $binary\n * @return string\n * @static\n */\n public static function escape($value, $binary = false)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->escape($value, $binary);\n }\n\n /**\n * Determine if the database connection has modified any database records.\n *\n * @return bool\n * @static\n */\n public static function hasModifiedRecords()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->hasModifiedRecords();\n }\n\n /**\n * Indicate if any records have been modified.\n *\n * @param bool $value\n * @return void\n * @static\n */\n public static function recordsHaveBeenModified($value = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->recordsHaveBeenModified($value);\n }\n\n /**\n * Set the record modification state.\n *\n * @param bool $value\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setRecordModificationState($value)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setRecordModificationState($value);\n }\n\n /**\n * Reset the record modification state.\n *\n * @return void\n * @static\n */\n public static function forgetRecordModificationState()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->forgetRecordModificationState();\n }\n\n /**\n * Indicate that the connection should use the write PDO connection for reads.\n *\n * @param bool $value\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function useWriteConnectionWhenReading($value = true)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->useWriteConnectionWhenReading($value);\n }\n\n /**\n * Get the current PDO connection.\n *\n * @return \\PDO\n * @static\n */\n public static function getPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getPdo();\n }\n\n /**\n * Get the current PDO connection parameter without executing any reconnect logic.\n *\n * @return \\PDO|\\Closure|null\n * @static\n */\n public static function getRawPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawPdo();\n }\n\n /**\n * Get the current PDO connection used for reading.\n *\n * @return \\PDO\n * @static\n */\n public static function getReadPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getReadPdo();\n }\n\n /**\n * Get the current read PDO connection parameter without executing any reconnect logic.\n *\n * @return \\PDO|\\Closure|null\n * @static\n */\n public static function getRawReadPdo()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawReadPdo();\n }\n\n /**\n * Set the PDO connection.\n *\n * @param \\PDO|\\Closure|null $pdo\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setPdo($pdo)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setPdo($pdo);\n }\n\n /**\n * Set the PDO connection used for reading.\n *\n * @param \\PDO|\\Closure|null $pdo\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setReadPdo($pdo)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setReadPdo($pdo);\n }\n\n /**\n * Get the database connection name.\n *\n * @return string|null\n * @static\n */\n public static function getName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getName();\n }\n\n /**\n * Get the database connection full name.\n *\n * @return string|null\n * @static\n */\n public static function getNameWithReadWriteType()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getNameWithReadWriteType();\n }\n\n /**\n * Get an option from the configuration options.\n *\n * @param string|null $option\n * @return mixed\n * @static\n */\n public static function getConfig($option = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getConfig($option);\n }\n\n /**\n * Get the PDO driver name.\n *\n * @return string\n * @static\n */\n public static function getDriverName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDriverName();\n }\n\n /**\n * Get the query grammar used by the connection.\n *\n * @return \\Illuminate\\Database\\Query\\Grammars\\Grammar\n * @static\n */\n public static function getQueryGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getQueryGrammar();\n }\n\n /**\n * Set the query grammar used by the connection.\n *\n * @param \\Illuminate\\Database\\Query\\Grammars\\Grammar $grammar\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setQueryGrammar($grammar)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setQueryGrammar($grammar);\n }\n\n /**\n * Get the schema grammar used by the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\Grammars\\Grammar\n * @static\n */\n public static function getSchemaGrammar()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getSchemaGrammar();\n }\n\n /**\n * Set the schema grammar used by the connection.\n *\n * @param \\Illuminate\\Database\\Schema\\Grammars\\Grammar $grammar\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setSchemaGrammar($grammar)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setSchemaGrammar($grammar);\n }\n\n /**\n * Get the query post processor used by the connection.\n *\n * @return \\Illuminate\\Database\\Query\\Processors\\Processor\n * @static\n */\n public static function getPostProcessor()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getPostProcessor();\n }\n\n /**\n * Set the query post processor used by the connection.\n *\n * @param \\Illuminate\\Database\\Query\\Processors\\Processor $processor\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setPostProcessor($processor)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setPostProcessor($processor);\n }\n\n /**\n * Get the event dispatcher used by the connection.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getEventDispatcher()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getEventDispatcher();\n }\n\n /**\n * Set the event dispatcher instance on the connection.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setEventDispatcher($events)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setEventDispatcher($events);\n }\n\n /**\n * Unset the event dispatcher for this connection.\n *\n * @return void\n * @static\n */\n public static function unsetEventDispatcher()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->unsetEventDispatcher();\n }\n\n /**\n * Set the transaction manager instance on the connection.\n *\n * @param \\Illuminate\\Database\\DatabaseTransactionsManager $manager\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setTransactionManager($manager)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setTransactionManager($manager);\n }\n\n /**\n * Unset the transaction manager for this connection.\n *\n * @return void\n * @static\n */\n public static function unsetTransactionManager()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->unsetTransactionManager();\n }\n\n /**\n * Determine if the connection is in a \"dry run\".\n *\n * @return bool\n * @static\n */\n public static function pretending()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->pretending();\n }\n\n /**\n * Get the connection query log.\n *\n * @return \\Illuminate\\Database\\array{query: string, bindings: array, time: float|null}[]\n * @static\n */\n public static function getQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getQueryLog();\n }\n\n /**\n * Get the connection query log with embedded bindings.\n *\n * @return array\n * @static\n */\n public static function getRawQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getRawQueryLog();\n }\n\n /**\n * Clear the query log.\n *\n * @return void\n * @static\n */\n public static function flushQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->flushQueryLog();\n }\n\n /**\n * Enable the query log on the connection.\n *\n * @return void\n * @static\n */\n public static function enableQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->enableQueryLog();\n }\n\n /**\n * Disable the query log on the connection.\n *\n * @return void\n * @static\n */\n public static function disableQueryLog()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->disableQueryLog();\n }\n\n /**\n * Determine whether we're logging queries.\n *\n * @return bool\n * @static\n */\n public static function logging()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->logging();\n }\n\n /**\n * Get the name of the connected database.\n *\n * @return string\n * @static\n */\n public static function getDatabaseName()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getDatabaseName();\n }\n\n /**\n * Set the name of the connected database.\n *\n * @param string $database\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setDatabaseName($database)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setDatabaseName($database);\n }\n\n /**\n * Set the read / write type of the connection.\n *\n * @param string|null $readWriteType\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setReadWriteType($readWriteType)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setReadWriteType($readWriteType);\n }\n\n /**\n * Get the table prefix for the connection.\n *\n * @return string\n * @static\n */\n public static function getTablePrefix()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->getTablePrefix();\n }\n\n /**\n * Set the table prefix in use by the connection.\n *\n * @param string $prefix\n * @return \\Illuminate\\Database\\MariaDbConnection\n * @static\n */\n public static function setTablePrefix($prefix)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->setTablePrefix($prefix);\n }\n\n /**\n * Execute the given callback without table prefix.\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutTablePrefix($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->withoutTablePrefix($callback);\n }\n\n /**\n * Register a connection resolver.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function resolverFor($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n \\Illuminate\\Database\\MariaDbConnection::resolverFor($driver, $callback);\n }\n\n /**\n * Get the connection resolver for the given driver.\n *\n * @param string $driver\n * @return \\Closure|null\n * @static\n */\n public static function getResolver($driver)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n return \\Illuminate\\Database\\MariaDbConnection::getResolver($driver);\n }\n\n /**\n * @template TReturn of mixed\n * \n * Execute a Closure within a transaction.\n * @param (\\Closure(static): TReturn) $callback\n * @param int $attempts\n * @return TReturn\n * @throws \\Throwable\n * @static\n */\n public static function transaction($callback, $attempts = 1)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->transaction($callback, $attempts);\n }\n\n /**\n * Start a new database transaction.\n *\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function beginTransaction()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->beginTransaction();\n }\n\n /**\n * Commit the active database transaction.\n *\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function commit()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->commit();\n }\n\n /**\n * Rollback the active database transaction.\n *\n * @param int|null $toLevel\n * @return void\n * @throws \\Throwable\n * @static\n */\n public static function rollBack($toLevel = null)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->rollBack($toLevel);\n }\n\n /**\n * Get the number of active transactions.\n *\n * @return int\n * @static\n */\n public static function transactionLevel()\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n return $instance->transactionLevel();\n }\n\n /**\n * Execute the callback after a transaction commits.\n *\n * @param callable $callback\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function afterCommit($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->afterCommit($callback);\n }\n\n /**\n * Execute the callback after a transaction rolls back.\n *\n * @param callable $callback\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function afterRollBack($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Connection \n /** @var \\Illuminate\\Database\\MariaDbConnection $instance */\n $instance->afterRollBack($callback);\n }\n\n }\n /**\n * @see \\Illuminate\\Events\\Dispatcher\n * @see \\Illuminate\\Support\\Testing\\Fakes\\EventFake\n */\n class Event {\n /**\n * Register an event listener with the dispatcher.\n *\n * @param \\Illuminate\\Events\\Queued\\Closure|callable|array|class-string|string $events\n * @param \\Illuminate\\Events\\Queued\\Closure|callable|array|class-string|null $listener\n * @return void\n * @static\n */\n public static function listen($events, $listener = null)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->listen($events, $listener);\n }\n\n /**\n * Determine if a given event has listeners.\n *\n * @param string $eventName\n * @return bool\n * @static\n */\n public static function hasListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->hasListeners($eventName);\n }\n\n /**\n * Determine if the given event has any wildcard listeners.\n *\n * @param string $eventName\n * @return bool\n * @static\n */\n public static function hasWildcardListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->hasWildcardListeners($eventName);\n }\n\n /**\n * Register an event and payload to be fired later.\n *\n * @param string $event\n * @param object|array $payload\n * @return void\n * @static\n */\n public static function push($event, $payload = [])\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->push($event, $payload);\n }\n\n /**\n * Flush a set of pushed events.\n *\n * @param string $event\n * @return void\n * @static\n */\n public static function flush($event)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->flush($event);\n }\n\n /**\n * Register an event subscriber with the dispatcher.\n *\n * @param object|string $subscriber\n * @return void\n * @static\n */\n public static function subscribe($subscriber)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->subscribe($subscriber);\n }\n\n /**\n * Fire an event until the first non-null response is returned.\n *\n * @param string|object $event\n * @param mixed $payload\n * @return mixed\n * @static\n */\n public static function until($event, $payload = [])\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->until($event, $payload);\n }\n\n /**\n * Fire an event and call the listeners.\n *\n * @param string|object $event\n * @param mixed $payload\n * @param bool $halt\n * @return array|null\n * @static\n */\n public static function dispatch($event, $payload = [], $halt = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->dispatch($event, $payload, $halt);\n }\n\n /**\n * Get all of the listeners for a given event name.\n *\n * @param string $eventName\n * @return array\n * @static\n */\n public static function getListeners($eventName)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->getListeners($eventName);\n }\n\n /**\n * Register an event listener with the dispatcher.\n *\n * @param \\Closure|string|array $listener\n * @param bool $wildcard\n * @return \\Closure\n * @static\n */\n public static function makeListener($listener, $wildcard = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->makeListener($listener, $wildcard);\n }\n\n /**\n * Create a class based listener using the IoC container.\n *\n * @param string $listener\n * @param bool $wildcard\n * @return \\Closure\n * @static\n */\n public static function createClassListener($listener, $wildcard = false)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->createClassListener($listener, $wildcard);\n }\n\n /**\n * Remove a set of listeners from the dispatcher.\n *\n * @param string $event\n * @return void\n * @static\n */\n public static function forget($event)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->forget($event);\n }\n\n /**\n * Forget all of the pushed listeners.\n *\n * @return void\n * @static\n */\n public static function forgetPushed()\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n $instance->forgetPushed();\n }\n\n /**\n * Set the queue resolver implementation.\n *\n * @param callable $resolver\n * @return \\Illuminate\\Events\\Dispatcher\n * @static\n */\n public static function setQueueResolver($resolver)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->setQueueResolver($resolver);\n }\n\n /**\n * Set the database transaction manager resolver implementation.\n *\n * @param callable $resolver\n * @return \\Illuminate\\Events\\Dispatcher\n * @static\n */\n public static function setTransactionManagerResolver($resolver)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->setTransactionManagerResolver($resolver);\n }\n\n /**\n * Execute the given callback while deferring events, then dispatch all deferred events.\n *\n * @param callable $callback\n * @param array|null $events\n * @return mixed\n * @static\n */\n public static function defer($callback, $events = null)\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->defer($callback, $events);\n }\n\n /**\n * Gets the raw, unprepared listeners.\n *\n * @return array\n * @static\n */\n public static function getRawListeners()\n {\n /** @var \\Illuminate\\Events\\Dispatcher $instance */\n return $instance->getRawListeners();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Events\\Dispatcher::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Events\\Dispatcher::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Events\\Dispatcher::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Events\\Dispatcher::flushMacros();\n }\n\n /**\n * Specify the events that should be dispatched instead of faked.\n *\n * @param array|string $eventsToDispatch\n * @return \\Illuminate\\Support\\Testing\\Fakes\\EventFake\n * @static\n */\n public static function except($eventsToDispatch)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->except($eventsToDispatch);\n }\n\n /**\n * Assert if an event has a listener attached to it.\n *\n * @param string $expectedEvent\n * @param string|array $expectedListener\n * @return void\n * @static\n */\n public static function assertListening($expectedEvent, $expectedListener)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertListening($expectedEvent, $expectedListener);\n }\n\n /**\n * Assert if an event was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $event\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertDispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatched($event, $callback);\n }\n\n /**\n * Assert if an event was dispatched exactly once.\n *\n * @param string $event\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedOnce($event)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatchedOnce($event);\n }\n\n /**\n * Assert if an event was dispatched a number of times.\n *\n * @param string $event\n * @param int $times\n * @return void\n * @static\n */\n public static function assertDispatchedTimes($event, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertDispatchedTimes($event, $times);\n }\n\n /**\n * Determine if an event was dispatched based on a truth-test callback.\n *\n * @param string|\\Closure $event\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotDispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertNotDispatched($event, $callback);\n }\n\n /**\n * Assert that no events were dispatched.\n *\n * @return void\n * @static\n */\n public static function assertNothingDispatched()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n $instance->assertNothingDispatched();\n }\n\n /**\n * Get all of the events matching a truth-test callback.\n *\n * @param string $event\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dispatched($event, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->dispatched($event, $callback);\n }\n\n /**\n * Determine if the given event has been dispatched.\n *\n * @param string $event\n * @return bool\n * @static\n */\n public static function hasDispatched($event)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->hasDispatched($event);\n }\n\n /**\n * Get the events that have been dispatched.\n *\n * @return array\n * @static\n */\n public static function dispatchedEvents()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\EventFake $instance */\n return $instance->dispatchedEvents();\n }\n\n }\n /**\n * @see \\Illuminate\\Filesystem\\Filesystem\n */\n class File {\n /**\n * Determine if a file or directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function exists($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->exists($path);\n }\n\n /**\n * Determine if a file or directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function missing($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->missing($path);\n }\n\n /**\n * Get the contents of a file.\n *\n * @param string $path\n * @param bool $lock\n * @return string\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function get($path, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->get($path, $lock);\n }\n\n /**\n * Get the contents of a file as decoded JSON.\n *\n * @param string $path\n * @param int $flags\n * @param bool $lock\n * @return array\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function json($path, $flags = 0, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->json($path, $flags, $lock);\n }\n\n /**\n * Get contents of a file with shared access.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function sharedGet($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->sharedGet($path);\n }\n\n /**\n * Get the returned value of a file.\n *\n * @param string $path\n * @param array $data\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function getRequire($path, $data = [])\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->getRequire($path, $data);\n }\n\n /**\n * Require the given file once.\n *\n * @param string $path\n * @param array $data\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function requireOnce($path, $data = [])\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->requireOnce($path, $data);\n }\n\n /**\n * Get the contents of a file one line at a time.\n *\n * @param string $path\n * @return \\Illuminate\\Support\\LazyCollection\n * @throws \\Illuminate\\Contracts\\Filesystem\\FileNotFoundException\n * @static\n */\n public static function lines($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->lines($path);\n }\n\n /**\n * Get the hash of the file at the given path.\n *\n * @param string $path\n * @param string $algorithm\n * @return string|false\n * @static\n */\n public static function hash($path, $algorithm = 'md5')\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->hash($path, $algorithm);\n }\n\n /**\n * Write the contents of a file.\n *\n * @param string $path\n * @param string $contents\n * @param bool $lock\n * @return int|bool\n * @static\n */\n public static function put($path, $contents, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->put($path, $contents, $lock);\n }\n\n /**\n * Write the contents of a file, replacing it atomically if it already exists.\n *\n * @param string $path\n * @param string $content\n * @param int|null $mode\n * @return void\n * @static\n */\n public static function replace($path, $content, $mode = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->replace($path, $content, $mode);\n }\n\n /**\n * Replace a given string within a given file.\n *\n * @param array|string $search\n * @param array|string $replace\n * @param string $path\n * @return void\n * @static\n */\n public static function replaceInFile($search, $replace, $path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->replaceInFile($search, $replace, $path);\n }\n\n /**\n * Prepend to a file.\n *\n * @param string $path\n * @param string $data\n * @return int\n * @static\n */\n public static function prepend($path, $data)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->prepend($path, $data);\n }\n\n /**\n * Append to a file.\n *\n * @param string $path\n * @param string $data\n * @param bool $lock\n * @return int\n * @static\n */\n public static function append($path, $data, $lock = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->append($path, $data, $lock);\n }\n\n /**\n * Get or set UNIX mode of a file or directory.\n *\n * @param string $path\n * @param int|null $mode\n * @return mixed\n * @static\n */\n public static function chmod($path, $mode = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->chmod($path, $mode);\n }\n\n /**\n * Delete the file at a given path.\n *\n * @param string|array $paths\n * @return bool\n * @static\n */\n public static function delete($paths)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->delete($paths);\n }\n\n /**\n * Move a file to a new location.\n *\n * @param string $path\n * @param string $target\n * @return bool\n * @static\n */\n public static function move($path, $target)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->move($path, $target);\n }\n\n /**\n * Copy a file to a new location.\n *\n * @param string $path\n * @param string $target\n * @return bool\n * @static\n */\n public static function copy($path, $target)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->copy($path, $target);\n }\n\n /**\n * Create a symlink to the target file or directory. On Windows, a hard link is created if the target is a file.\n *\n * @param string $target\n * @param string $link\n * @return bool|null\n * @static\n */\n public static function link($target, $link)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->link($target, $link);\n }\n\n /**\n * Create a relative symlink to the target file or directory.\n *\n * @param string $target\n * @param string $link\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function relativeLink($target, $link)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->relativeLink($target, $link);\n }\n\n /**\n * Extract the file name from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function name($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->name($path);\n }\n\n /**\n * Extract the trailing name component from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function basename($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->basename($path);\n }\n\n /**\n * Extract the parent directory from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function dirname($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->dirname($path);\n }\n\n /**\n * Extract the file extension from a file path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function extension($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->extension($path);\n }\n\n /**\n * Guess the file extension from the mime-type of a given file.\n *\n * @param string $path\n * @return string|null\n * @throws \\RuntimeException\n * @static\n */\n public static function guessExtension($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->guessExtension($path);\n }\n\n /**\n * Get the file type of a given file.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function type($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->type($path);\n }\n\n /**\n * Get the mime-type of a given file.\n *\n * @param string $path\n * @return string|false\n * @static\n */\n public static function mimeType($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->mimeType($path);\n }\n\n /**\n * Get the file size of a given file.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function size($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->size($path);\n }\n\n /**\n * Get the file's last modification time.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function lastModified($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->lastModified($path);\n }\n\n /**\n * Determine if the given path is a directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function isDirectory($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isDirectory($directory);\n }\n\n /**\n * Determine if the given path is a directory that does not contain any other files or directories.\n *\n * @param string $directory\n * @param bool $ignoreDotFiles\n * @return bool\n * @static\n */\n public static function isEmptyDirectory($directory, $ignoreDotFiles = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isEmptyDirectory($directory, $ignoreDotFiles);\n }\n\n /**\n * Determine if the given path is readable.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isReadable($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isReadable($path);\n }\n\n /**\n * Determine if the given path is writable.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isWritable($path)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isWritable($path);\n }\n\n /**\n * Determine if two files are the same by comparing their hashes.\n *\n * @param string $firstFile\n * @param string $secondFile\n * @return bool\n * @static\n */\n public static function hasSameHash($firstFile, $secondFile)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->hasSameHash($firstFile, $secondFile);\n }\n\n /**\n * Determine if the given path is a file.\n *\n * @param string $file\n * @return bool\n * @static\n */\n public static function isFile($file)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->isFile($file);\n }\n\n /**\n * Find path names matching a given pattern.\n *\n * @param string $pattern\n * @param int $flags\n * @return array\n * @static\n */\n public static function glob($pattern, $flags = 0)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->glob($pattern, $flags);\n }\n\n /**\n * Get an array of all files in a directory.\n *\n * @param string $directory\n * @param bool $hidden\n * @return \\Symfony\\Component\\Finder\\SplFileInfo[]\n * @static\n */\n public static function files($directory, $hidden = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->files($directory, $hidden);\n }\n\n /**\n * Get all of the files from the given directory (recursive).\n *\n * @param string $directory\n * @param bool $hidden\n * @return \\Symfony\\Component\\Finder\\SplFileInfo[]\n * @static\n */\n public static function allFiles($directory, $hidden = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->allFiles($directory, $hidden);\n }\n\n /**\n * Get all of the directories within a given directory.\n *\n * @param string $directory\n * @return array\n * @static\n */\n public static function directories($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->directories($directory);\n }\n\n /**\n * Ensure a directory exists.\n *\n * @param string $path\n * @param int $mode\n * @param bool $recursive\n * @return void\n * @static\n */\n public static function ensureDirectoryExists($path, $mode = 493, $recursive = true)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n $instance->ensureDirectoryExists($path, $mode, $recursive);\n }\n\n /**\n * Create a directory.\n *\n * @param string $path\n * @param int $mode\n * @param bool $recursive\n * @param bool $force\n * @return bool\n * @static\n */\n public static function makeDirectory($path, $mode = 493, $recursive = false, $force = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->makeDirectory($path, $mode, $recursive, $force);\n }\n\n /**\n * Move a directory.\n *\n * @param string $from\n * @param string $to\n * @param bool $overwrite\n * @return bool\n * @static\n */\n public static function moveDirectory($from, $to, $overwrite = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->moveDirectory($from, $to, $overwrite);\n }\n\n /**\n * Copy a directory from one location to another.\n *\n * @param string $directory\n * @param string $destination\n * @param int|null $options\n * @return bool\n * @static\n */\n public static function copyDirectory($directory, $destination, $options = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->copyDirectory($directory, $destination, $options);\n }\n\n /**\n * Recursively delete a directory.\n * \n * The directory itself may be optionally preserved.\n *\n * @param string $directory\n * @param bool $preserve\n * @return bool\n * @static\n */\n public static function deleteDirectory($directory, $preserve = false)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->deleteDirectory($directory, $preserve);\n }\n\n /**\n * Remove all of the directories within a given directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function deleteDirectories($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->deleteDirectories($directory);\n }\n\n /**\n * Empty the specified directory of all files and folders.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function cleanDirectory($directory)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->cleanDirectory($directory);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\Filesystem $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Filesystem\\Filesystem::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Filesystem\\Filesystem::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Filesystem\\Filesystem::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Filesystem\\Filesystem::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Auth\\Access\\Gate\n */\n class Gate {\n /**\n * Determine if a given ability has been defined.\n *\n * @param string|array $ability\n * @return bool\n * @static\n */\n public static function has($ability)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->has($ability);\n }\n\n /**\n * Perform an on-demand authorization check. Throw an authorization exception if the condition or callback is false.\n *\n * @param \\Illuminate\\Auth\\Access\\Response|\\Closure|bool $condition\n * @param string|null $message\n * @param string|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function allowIf($condition, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->allowIf($condition, $message, $code);\n }\n\n /**\n * Perform an on-demand authorization check. Throw an authorization exception if the condition or callback is true.\n *\n * @param \\Illuminate\\Auth\\Access\\Response|\\Closure|bool $condition\n * @param string|null $message\n * @param string|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function denyIf($condition, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyIf($condition, $message, $code);\n }\n\n /**\n * Define a new ability.\n *\n * @param \\UnitEnum|string $ability\n * @param callable|array|string $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function define($ability, $callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->define($ability, $callback);\n }\n\n /**\n * Define abilities for a resource.\n *\n * @param string $name\n * @param string $class\n * @param array|null $abilities\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function resource($name, $class, $abilities = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->resource($name, $class, $abilities);\n }\n\n /**\n * Define a policy class for a given class type.\n *\n * @param string $class\n * @param string $policy\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function policy($class, $policy)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->policy($class, $policy);\n }\n\n /**\n * Register a callback to run before all Gate checks.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function before($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->before($callback);\n }\n\n /**\n * Register a callback to run after all Gate checks.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function after($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->after($callback);\n }\n\n /**\n * Determine if all of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $ability\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function allows($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->allows($ability, $arguments);\n }\n\n /**\n * Determine if any of the given abilities should be denied for the current user.\n *\n * @param iterable|\\UnitEnum|string $ability\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function denies($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denies($ability, $arguments);\n }\n\n /**\n * Determine if all of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function check($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->check($abilities, $arguments);\n }\n\n /**\n * Determine if any one of the given abilities should be granted for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function any($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->any($abilities, $arguments);\n }\n\n /**\n * Determine if all of the given abilities should be denied for the current user.\n *\n * @param iterable|\\UnitEnum|string $abilities\n * @param mixed $arguments\n * @return bool\n * @static\n */\n public static function none($abilities, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->none($abilities, $arguments);\n }\n\n /**\n * Determine if the given ability should be granted for the current user.\n *\n * @param \\UnitEnum|string $ability\n * @param mixed $arguments\n * @return \\Illuminate\\Auth\\Access\\Response\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function authorize($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->authorize($ability, $arguments);\n }\n\n /**\n * Inspect the user for the given ability.\n *\n * @param \\UnitEnum|string $ability\n * @param mixed $arguments\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function inspect($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->inspect($ability, $arguments);\n }\n\n /**\n * Get the raw result from the authorization callback.\n *\n * @param string $ability\n * @param mixed $arguments\n * @return mixed\n * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n * @static\n */\n public static function raw($ability, $arguments = [])\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->raw($ability, $arguments);\n }\n\n /**\n * Get a policy instance for a given class.\n *\n * @param object|string $class\n * @return mixed\n * @static\n */\n public static function getPolicyFor($class)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->getPolicyFor($class);\n }\n\n /**\n * Specify a callback to be used to guess policy names.\n *\n * @param callable $callback\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function guessPolicyNamesUsing($callback)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->guessPolicyNamesUsing($callback);\n }\n\n /**\n * Build a policy class instance of the given type.\n *\n * @param object|string $class\n * @return mixed\n * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n * @static\n */\n public static function resolvePolicy($class)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->resolvePolicy($class);\n }\n\n /**\n * Get a gate instance for the given user.\n *\n * @param \\Illuminate\\Contracts\\Auth\\Authenticatable|mixed $user\n * @return static\n * @static\n */\n public static function forUser($user)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->forUser($user);\n }\n\n /**\n * Get all of the defined abilities.\n *\n * @return array\n * @static\n */\n public static function abilities()\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->abilities();\n }\n\n /**\n * Get all of the defined policies.\n *\n * @return array\n * @static\n */\n public static function policies()\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->policies();\n }\n\n /**\n * Set the default denial response for gates and policies.\n *\n * @param \\Illuminate\\Auth\\Access\\Response $response\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function defaultDenialResponse($response)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->defaultDenialResponse($response);\n }\n\n /**\n * Set the container instance used by the gate.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Auth\\Access\\Gate\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Deny with a HTTP status code.\n *\n * @param int $status\n * @param string|null $message\n * @param int|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function denyWithStatus($status, $message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyWithStatus($status, $message, $code);\n }\n\n /**\n * Deny with a 404 HTTP status code.\n *\n * @param string|null $message\n * @param int|null $code\n * @return \\Illuminate\\Auth\\Access\\Response\n * @static\n */\n public static function denyAsNotFound($message = null, $code = null)\n {\n /** @var \\Illuminate\\Auth\\Access\\Gate $instance */\n return $instance->denyAsNotFound($message, $code);\n }\n\n }\n /**\n * @see \\Illuminate\\Hashing\\HashManager\n * @see \\Illuminate\\Hashing\\AbstractHasher\n */\n class Hash {\n /**\n * Create an instance of the Bcrypt hash Driver.\n *\n * @return \\Illuminate\\Hashing\\BcryptHasher\n * @static\n */\n public static function createBcryptDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createBcryptDriver();\n }\n\n /**\n * Create an instance of the Argon2i hash Driver.\n *\n * @return \\Illuminate\\Hashing\\ArgonHasher\n * @static\n */\n public static function createArgonDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createArgonDriver();\n }\n\n /**\n * Create an instance of the Argon2id hash Driver.\n *\n * @return \\Illuminate\\Hashing\\Argon2IdHasher\n * @static\n */\n public static function createArgon2idDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->createArgon2idDriver();\n }\n\n /**\n * Get information about the given hashed value.\n *\n * @param string $hashedValue\n * @return array\n * @static\n */\n public static function info($hashedValue)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->info($hashedValue);\n }\n\n /**\n * Hash the given value.\n *\n * @param string $value\n * @param array $options\n * @return string\n * @static\n */\n public static function make($value, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->make($value, $options);\n }\n\n /**\n * Check the given plain value against a hash.\n *\n * @param string $value\n * @param string $hashedValue\n * @param array $options\n * @return bool\n * @static\n */\n public static function check($value, $hashedValue, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->check($value, $hashedValue, $options);\n }\n\n /**\n * Check if the given hash has been hashed using the given options.\n *\n * @param string $hashedValue\n * @param array $options\n * @return bool\n * @static\n */\n public static function needsRehash($hashedValue, $options = [])\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->needsRehash($hashedValue, $options);\n }\n\n /**\n * Determine if a given string is already hashed.\n *\n * @param string $value\n * @return bool\n * @static\n */\n public static function isHashed($value)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->isHashed($value);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Verifies that the configuration is less than or equal to what is configured.\n *\n * @param array $value\n * @return bool\n * @internal\n * @static\n */\n public static function verifyConfiguration($value)\n {\n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->verifyConfiguration($value);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Hashing\\HashManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Hashing\\HashManager $instance */\n return $instance->forgetDrivers();\n }\n\n }\n /**\n * @method static \\Illuminate\\Http\\Client\\PendingRequest baseUrl(string $url)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withBody(\\Psr\\Http\\Message\\StreamInterface|string $content, string $contentType = 'application/json')\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asJson()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asForm()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest attach(string|array $name, string|resource $contents = '', string|null $filename = null, array $headers = [])\n * @method static \\Illuminate\\Http\\Client\\PendingRequest asMultipart()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest bodyFormat(string $format)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withQueryParameters(array $parameters)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest contentType(string $contentType)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest acceptJson()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest accept(string $contentType)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withHeaders(array $headers)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withHeader(string $name, mixed $value)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest replaceHeaders(array $headers)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withBasicAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withDigestAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withNtlmAuth(string $username, string $password)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withToken(string $token, string $type = 'Bearer')\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withUserAgent(string|bool $userAgent)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withUrlParameters(array $parameters = [])\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withCookies(array $cookies, string $domain)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest maxRedirects(int $max)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withoutRedirecting()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withoutVerifying()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest sink(string|resource $to)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest timeout(int|float $seconds)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest connectTimeout(int|float $seconds)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest retry(array|int $times, \\Closure|int $sleepMilliseconds = 0, callable|null $when = null, bool $throw = true)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withOptions(array $options)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withRequestMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest withResponseMiddleware(callable $middleware)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest beforeSending(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throw(callable|null $callback = null)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throwIf(callable|bool $condition)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest throwUnless(callable|bool $condition)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dump()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dd()\n * @method static \\Illuminate\\Http\\Client\\Response get(string $url, array|string|null $query = null)\n * @method static \\Illuminate\\Http\\Client\\Response head(string $url, array|string|null $query = null)\n * @method static \\Illuminate\\Http\\Client\\Response post(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response patch(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response put(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static \\Illuminate\\Http\\Client\\Response delete(string $url, array|\\JsonSerializable|\\Illuminate\\Contracts\\Support\\Arrayable $data = [])\n * @method static array pool(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\Batch batch(callable $callback)\n * @method static \\Illuminate\\Http\\Client\\Response send(string $method, string $url, array $options = [])\n * @method static \\GuzzleHttp\\Client buildClient()\n * @method static \\GuzzleHttp\\Client createClient(\\GuzzleHttp\\HandlerStack $handlerStack)\n * @method static \\GuzzleHttp\\HandlerStack buildHandlerStack()\n * @method static \\GuzzleHttp\\HandlerStack pushHandlers(\\GuzzleHttp\\HandlerStack $handlerStack)\n * @method static \\Closure buildBeforeSendingHandler()\n * @method static \\Closure buildRecorderHandler()\n * @method static \\Closure buildStubHandler()\n * @method static \\GuzzleHttp\\Psr7\\RequestInterface runBeforeSendingCallbacks(\\GuzzleHttp\\Psr7\\RequestInterface $request, array $options)\n * @method static array mergeOptions(array ...$options)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest stub(callable $callback)\n * @method static bool isAllowedRequestUrl(string $url)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest async(bool $async = true)\n * @method static \\GuzzleHttp\\Promise\\PromiseInterface|null getPromise()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest truncateExceptionsAt(int $length)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest dontTruncateExceptions()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest setClient(\\GuzzleHttp\\Client $client)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest setHandler(callable $handler)\n * @method static array getOptions()\n * @method static \\Illuminate\\Http\\Client\\PendingRequest|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Http\\Client\\PendingRequest|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Http\\Client\\Factory\n */\n class Http {\n /**\n * Add middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalMiddleware($middleware);\n }\n\n /**\n * Add request middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalRequestMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalRequestMiddleware($middleware);\n }\n\n /**\n * Add response middleware to apply to every request.\n *\n * @param callable $middleware\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalResponseMiddleware($middleware)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalResponseMiddleware($middleware);\n }\n\n /**\n * Set the options to apply to every request.\n *\n * @param \\Closure|array $options\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function globalOptions($options)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->globalOptions($options);\n }\n\n /**\n * Create a new response instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array $headers\n * @return \\GuzzleHttp\\Promise\\PromiseInterface\n * @static\n */\n public static function response($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::response($body, $status, $headers);\n }\n\n /**\n * Create a new PSR-7 response instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array<string, mixed> $headers\n * @return \\GuzzleHttp\\Psr7\\Response\n * @static\n */\n public static function psr7Response($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::psr7Response($body, $status, $headers);\n }\n\n /**\n * Create a new RequestException instance for use during stubbing.\n *\n * @param array|string|null $body\n * @param int $status\n * @param array<string, mixed> $headers\n * @return \\Illuminate\\Http\\Client\\RequestException\n * @static\n */\n public static function failedRequest($body = null, $status = 200, $headers = [])\n {\n return \\Illuminate\\Http\\Client\\Factory::failedRequest($body, $status, $headers);\n }\n\n /**\n * Create a new connection exception for use during stubbing.\n *\n * @param string|null $message\n * @return \\Closure(\\Illuminate\\Http\\Client\\Request): \\GuzzleHttp\\Promise\\PromiseInterface\n * @static\n */\n public static function failedConnection($message = null)\n {\n return \\Illuminate\\Http\\Client\\Factory::failedConnection($message);\n }\n\n /**\n * Get an invokable object that returns a sequence of responses in order for use during stubbing.\n *\n * @param array $responses\n * @return \\Illuminate\\Http\\Client\\ResponseSequence\n * @static\n */\n public static function sequence($responses = [])\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->sequence($responses);\n }\n\n /**\n * Register a stub callable that will intercept requests and be able to return stub responses.\n *\n * @param callable|array<string, mixed>|null $callback\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function fake($callback = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->fake($callback);\n }\n\n /**\n * Register a response sequence for the given URL pattern.\n *\n * @param string $url\n * @return \\Illuminate\\Http\\Client\\ResponseSequence\n * @static\n */\n public static function fakeSequence($url = '*')\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->fakeSequence($url);\n }\n\n /**\n * Stub the given URL using the given callback.\n *\n * @param string $url\n * @param \\Illuminate\\Http\\Client\\Response|\\GuzzleHttp\\Promise\\PromiseInterface|callable|int|string|array|\\Illuminate\\Http\\Client\\ResponseSequence $callback\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function stubUrl($url, $callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->stubUrl($url, $callback);\n }\n\n /**\n * Indicate that an exception should be thrown if any request is not faked.\n *\n * @param bool $prevent\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function preventStrayRequests($prevent = true)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->preventStrayRequests($prevent);\n }\n\n /**\n * Determine if stray requests are being prevented.\n *\n * @return bool\n * @static\n */\n public static function preventingStrayRequests()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->preventingStrayRequests();\n }\n\n /**\n * Allow stray, unfaked requests entirely, or optionally allow only specific URLs.\n *\n * @param array<int, string>|null $only\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function allowStrayRequests($only = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->allowStrayRequests($only);\n }\n\n /**\n * Begin recording request / response pairs.\n *\n * @return \\Illuminate\\Http\\Client\\Factory\n * @static\n */\n public static function record()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->record();\n }\n\n /**\n * Record a request response pair.\n *\n * @param \\Illuminate\\Http\\Client\\Request $request\n * @param \\Illuminate\\Http\\Client\\Response|null $response\n * @return void\n * @static\n */\n public static function recordRequestResponsePair($request, $response)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->recordRequestResponsePair($request, $response);\n }\n\n /**\n * Assert that a request / response pair was recorded matching a given truth test.\n *\n * @param callable|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool) $callback\n * @return void\n * @static\n */\n public static function assertSent($callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSent($callback);\n }\n\n /**\n * Assert that the given request was sent in the given order.\n *\n * @param list<string|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool)|callable> $callbacks\n * @return void\n * @static\n */\n public static function assertSentInOrder($callbacks)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSentInOrder($callbacks);\n }\n\n /**\n * Assert that a request / response pair was not recorded matching a given truth test.\n *\n * @param callable|(\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool) $callback\n * @return void\n * @static\n */\n public static function assertNotSent($callback)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertNotSent($callback);\n }\n\n /**\n * Assert that no request / response pair was recorded.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert how many requests have been recorded.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertSentCount($count)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSentCount($count);\n }\n\n /**\n * Assert that every created response sequence is empty.\n *\n * @return void\n * @static\n */\n public static function assertSequencesAreEmpty()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n $instance->assertSequencesAreEmpty();\n }\n\n /**\n * Get a collection of the request / response pairs matching the given truth test.\n *\n * @param (\\Closure(\\Illuminate\\Http\\Client\\Request, \\Illuminate\\Http\\Client\\Response|null): bool)|callable $callback\n * @return \\Illuminate\\Support\\Collection<int, array{0: \\Illuminate\\Http\\Client\\Request, 1: \\Illuminate\\Http\\Client\\Response|null}>\n * @static\n */\n public static function recorded($callback = null)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->recorded($callback);\n }\n\n /**\n * Create a new pending request instance for this factory.\n *\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function createPendingRequest()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->createPendingRequest();\n }\n\n /**\n * Get the current event dispatcher implementation.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher|null\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Get the array of global middleware.\n *\n * @return array\n * @static\n */\n public static function getGlobalMiddleware()\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->getGlobalMiddleware();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Http\\Client\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Http\\Client\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Http\\Client\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Http\\Client\\Factory::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Http\\Client\\Factory $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatApi();\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatAnalyticsApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatAnalyticsApi();\n }\n\n }\n /**\n * @see \\Illuminate\\Translation\\Translator\n */\n class Lang {\n /**\n * Determine if a translation exists for a given locale.\n *\n * @param string $key\n * @param string|null $locale\n * @return bool\n * @static\n */\n public static function hasForLocale($key, $locale = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->hasForLocale($key, $locale);\n }\n\n /**\n * Determine if a translation exists.\n *\n * @param string $key\n * @param string|null $locale\n * @param bool $fallback\n * @return bool\n * @static\n */\n public static function has($key, $locale = null, $fallback = true)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->has($key, $locale, $fallback);\n }\n\n /**\n * Get the translation for the given key.\n *\n * @param string $key\n * @param array $replace\n * @param string|null $locale\n * @param bool $fallback\n * @return string|array\n * @static\n */\n public static function get($key, $replace = [], $locale = null, $fallback = true)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->get($key, $replace, $locale, $fallback);\n }\n\n /**\n * Get a translation according to an integer value.\n *\n * @param string $key\n * @param \\Countable|int|float|array $number\n * @param array $replace\n * @param string|null $locale\n * @return string\n * @static\n */\n public static function choice($key, $number, $replace = [], $locale = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->choice($key, $number, $replace, $locale);\n }\n\n /**\n * Add translation lines to the given locale.\n *\n * @param array $lines\n * @param string $locale\n * @param string $namespace\n * @return void\n * @static\n */\n public static function addLines($lines, $locale, $namespace = '*')\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addLines($lines, $locale, $namespace);\n }\n\n /**\n * Load the specified language group.\n *\n * @param string $namespace\n * @param string $group\n * @param string $locale\n * @return void\n * @static\n */\n public static function load($namespace, $group, $locale)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->load($namespace, $group, $locale);\n }\n\n /**\n * Register a callback that is responsible for handling missing translation keys.\n *\n * @param callable|null $callback\n * @return static\n * @static\n */\n public static function handleMissingKeysUsing($callback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->handleMissingKeysUsing($callback);\n }\n\n /**\n * Add a new namespace to the loader.\n *\n * @param string $namespace\n * @param string $hint\n * @return void\n * @static\n */\n public static function addNamespace($namespace, $hint)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addNamespace($namespace, $hint);\n }\n\n /**\n * Add a new path to the loader.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function addPath($path)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addPath($path);\n }\n\n /**\n * Add a new JSON path to the loader.\n *\n * @param string $path\n * @return void\n * @static\n */\n public static function addJsonPath($path)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->addJsonPath($path);\n }\n\n /**\n * Parse a key into namespace, group, and item.\n *\n * @param string $key\n * @return array\n * @static\n */\n public static function parseKey($key)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->parseKey($key);\n }\n\n /**\n * Specify a callback that should be invoked to determined the applicable locale array.\n *\n * @param callable $callback\n * @return void\n * @static\n */\n public static function determineLocalesUsing($callback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->determineLocalesUsing($callback);\n }\n\n /**\n * Get the message selector instance.\n *\n * @return \\Illuminate\\Translation\\MessageSelector\n * @static\n */\n public static function getSelector()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getSelector();\n }\n\n /**\n * Set the message selector instance.\n *\n * @param \\Illuminate\\Translation\\MessageSelector $selector\n * @return void\n * @static\n */\n public static function setSelector($selector)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setSelector($selector);\n }\n\n /**\n * Get the language line loader implementation.\n *\n * @return \\Illuminate\\Contracts\\Translation\\Loader\n * @static\n */\n public static function getLoader()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getLoader();\n }\n\n /**\n * Get the default locale being used.\n *\n * @return string\n * @static\n */\n public static function locale()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->locale();\n }\n\n /**\n * Get the default locale being used.\n *\n * @return string\n * @static\n */\n public static function getLocale()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getLocale();\n }\n\n /**\n * Set the default locale.\n *\n * @param string $locale\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function setLocale($locale)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setLocale($locale);\n }\n\n /**\n * Get the fallback locale being used.\n *\n * @return string\n * @static\n */\n public static function getFallback()\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n return $instance->getFallback();\n }\n\n /**\n * Set the fallback locale being used.\n *\n * @param string $fallback\n * @return void\n * @static\n */\n public static function setFallback($fallback)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setFallback($fallback);\n }\n\n /**\n * Set the loaded translation groups.\n *\n * @param array $loaded\n * @return void\n * @static\n */\n public static function setLoaded($loaded)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setLoaded($loaded);\n }\n\n /**\n * Add a handler to be executed in order to format a given class to a string during translation replacements.\n *\n * @param callable|string $class\n * @param callable|null $handler\n * @return void\n * @static\n */\n public static function stringable($class, $handler = null)\n {\n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->stringable($class, $handler);\n }\n\n /**\n * Set the parsed value of a key.\n *\n * @param string $key\n * @param array $parsed\n * @return void\n * @static\n */\n public static function setParsedKey($key, $parsed)\n {\n //Method inherited from \\Illuminate\\Support\\NamespacedItemResolver \n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->setParsedKey($key, $parsed);\n }\n\n /**\n * Flush the cache of parsed keys.\n *\n * @return void\n * @static\n */\n public static function flushParsedKeys()\n {\n //Method inherited from \\Illuminate\\Support\\NamespacedItemResolver \n /** @var \\Illuminate\\Translation\\Translator $instance */\n $instance->flushParsedKeys();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Translation\\Translator::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Translation\\Translator::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Translation\\Translator::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Translation\\Translator::flushMacros();\n }\n\n }\n /**\n * @method static void write(string $level, \\Illuminate\\Contracts\\Support\\Arrayable|\\Illuminate\\Contracts\\Support\\Jsonable|\\Illuminate\\Support\\Stringable|array|string $message, array $context = [])\n * @method static \\Illuminate\\Log\\Logger withContext(array $context = [])\n * @method static void listen(\\Closure $callback)\n * @method static \\Psr\\Log\\LoggerInterface getLogger()\n * @method static \\Illuminate\\Contracts\\Events\\Dispatcher getEventDispatcher()\n * @method static void setEventDispatcher(\\Illuminate\\Contracts\\Events\\Dispatcher $dispatcher)\n * @method static \\Illuminate\\Log\\Logger|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Log\\Logger|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Log\\LogManager\n */\n class Log {\n /**\n * Build an on-demand log channel.\n *\n * @param array $config\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new, on-demand aggregate logger instance.\n *\n * @param array $channels\n * @param string|null $channel\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function stack($channels, $channel = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->stack($channels, $channel);\n }\n\n /**\n * Get a log channel instance.\n *\n * @param string|null $channel\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function channel($channel = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->channel($channel);\n }\n\n /**\n * Get a log driver instance.\n *\n * @param string|null $driver\n * @return \\Psr\\Log\\LoggerInterface\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Share context across channels and stacks.\n *\n * @param array $context\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function shareContext($context)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->shareContext($context);\n }\n\n /**\n * The context shared across channels and stacks.\n *\n * @return array\n * @static\n */\n public static function sharedContext()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->sharedContext();\n }\n\n /**\n * Flush the log context on all currently resolved channels.\n *\n * @param string[]|null $keys\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function withoutContext($keys = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->withoutContext($keys);\n }\n\n /**\n * Flush the shared context.\n *\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function flushSharedContext()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->flushSharedContext();\n }\n\n /**\n * Get the default log driver name.\n *\n * @return string|null\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default log driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Unset the given channel instance.\n *\n * @param string|null $driver\n * @return void\n * @static\n */\n public static function forgetChannel($driver = null)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->forgetChannel($driver);\n }\n\n /**\n * Get all of the resolved log channels.\n *\n * @return array\n * @static\n */\n public static function getChannels()\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->getChannels();\n }\n\n /**\n * System is unusable.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function emergency($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->emergency($message, $context);\n }\n\n /**\n * Action must be taken immediately.\n * \n * Example: Entire website down, database unavailable, etc. This should\n * trigger the SMS alerts and wake you up.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function alert($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->alert($message, $context);\n }\n\n /**\n * Critical conditions.\n * \n * Example: Application component unavailable, unexpected exception.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function critical($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->critical($message, $context);\n }\n\n /**\n * Runtime errors that do not require immediate action but should typically\n * be logged and monitored.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function error($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->error($message, $context);\n }\n\n /**\n * Exceptional occurrences that are not errors.\n * \n * Example: Use of deprecated APIs, poor use of an API, undesirable things\n * that are not necessarily wrong.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function warning($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->warning($message, $context);\n }\n\n /**\n * Normal but significant events.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function notice($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->notice($message, $context);\n }\n\n /**\n * Interesting events.\n * \n * Example: User logs in, SQL logs.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function info($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->info($message, $context);\n }\n\n /**\n * Detailed debug information.\n *\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function debug($message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->debug($message, $context);\n }\n\n /**\n * Logs with an arbitrary level.\n *\n * @param mixed $level\n * @param string|\\Stringable $message\n * @param array $context\n * @return void\n * @static\n */\n public static function log($level, $message, $context = [])\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n $instance->log($level, $message, $context);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Log\\LogManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Log\\LogManager $instance */\n return $instance->setApplication($app);\n }\n\n }\n /**\n * @method static void alwaysFrom(string $address, string|null $name = null)\n * @method static void alwaysReplyTo(string $address, string|null $name = null)\n * @method static void alwaysReturnPath(string $address)\n * @method static void alwaysTo(string $address, string|null $name = null)\n * @method static \\Illuminate\\Mail\\SentMessage|null html(string $html, mixed $callback)\n * @method static \\Illuminate\\Mail\\SentMessage|null plain(string $view, array $data, mixed $callback)\n * @method static string render(string|array $view, array $data = [])\n * @method static mixed onQueue(\\BackedEnum|string|null $queue, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static mixed queueOn(string $queue, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static mixed laterOn(string $queue, \\DateTimeInterface|\\DateInterval|int $delay, \\Illuminate\\Contracts\\Mail\\Mailable $view)\n * @method static \\Symfony\\Component\\Mailer\\Transport\\TransportInterface getSymfonyTransport()\n * @method static \\Illuminate\\Contracts\\View\\Factory getViewFactory()\n * @method static void setSymfonyTransport(\\Symfony\\Component\\Mailer\\Transport\\TransportInterface $transport)\n * @method static \\Illuminate\\Mail\\Mailer setQueue(\\Illuminate\\Contracts\\Queue\\Factory $queue)\n * @method static void macro(string $name, object|callable $macro)\n * @method static void mixin(object $mixin, bool $replace = true)\n * @method static bool hasMacro(string $name)\n * @method static void flushMacros()\n * @see \\Illuminate\\Mail\\MailManager\n * @see \\Illuminate\\Support\\Testing\\Fakes\\MailFake\n */\n class Mail {\n /**\n * Get a mailer instance by name.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Mail\\Mailer\n * @static\n */\n public static function mailer($name = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->mailer($name);\n }\n\n /**\n * Get a mailer driver instance.\n *\n * @param string|null $driver\n * @return \\Illuminate\\Mail\\Mailer\n * @static\n */\n public static function driver($driver = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Build a new mailer instance.\n *\n * @param array $config\n * @return \\Illuminate\\Mail\\Mailer\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create a new transport instance.\n *\n * @param array $config\n * @return \\Symfony\\Component\\Mailer\\Transport\\TransportInterface\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function createSymfonyTransport($config)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->createSymfonyTransport($config);\n }\n\n /**\n * Get the default mail driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default mail driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Disconnect the given mailer and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom transport creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Forget all of the resolved mailer instances.\n *\n * @return \\Illuminate\\Mail\\MailManager\n * @static\n */\n public static function forgetMailers()\n {\n /** @var \\Illuminate\\Mail\\MailManager $instance */\n return $instance->forgetMailers();\n }\n\n /**\n * Assert if a mailable was sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|int|null $callback\n * @return void\n * @static\n */\n public static function assertSent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertSent($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not sent or queued to be sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotOutgoing($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotOutgoing($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not sent based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|null $callback\n * @return void\n * @static\n */\n public static function assertNotSent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotSent($mailable, $callback);\n }\n\n /**\n * Assert that no mailables were sent or queued to be sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingOutgoing()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingOutgoing();\n }\n\n /**\n * Assert that no mailables were sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert if a mailable was queued based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|int|null $callback\n * @return void\n * @static\n */\n public static function assertQueued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertQueued($mailable, $callback);\n }\n\n /**\n * Determine if a mailable was not queued based on a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|array|string|null $callback\n * @return void\n * @static\n */\n public static function assertNotQueued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNotQueued($mailable, $callback);\n }\n\n /**\n * Assert that no mailables were queued.\n *\n * @return void\n * @static\n */\n public static function assertNothingQueued()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertNothingQueued();\n }\n\n /**\n * Assert the total number of mailables that were sent.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertSentCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertSentCount($count);\n }\n\n /**\n * Assert the total number of mailables that were queued.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertQueuedCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertQueuedCount($count);\n }\n\n /**\n * Assert the total number of mailables that were sent or queued.\n *\n * @param int $count\n * @return void\n * @static\n */\n public static function assertOutgoingCount($count)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->assertOutgoingCount($count);\n }\n\n /**\n * Get all of the mailables matching a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function sent($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->sent($mailable, $callback);\n }\n\n /**\n * Determine if the given mailable has been sent.\n *\n * @param string $mailable\n * @return bool\n * @static\n */\n public static function hasSent($mailable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->hasSent($mailable);\n }\n\n /**\n * Get all of the queued mailables matching a truth-test callback.\n *\n * @param string|\\Closure $mailable\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function queued($mailable, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->queued($mailable, $callback);\n }\n\n /**\n * Determine if the given mailable has been queued.\n *\n * @param string $mailable\n * @return bool\n * @static\n */\n public static function hasQueued($mailable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->hasQueued($mailable);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function to($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->to($users);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function cc($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->cc($users);\n }\n\n /**\n * Begin the process of mailing a mailable class instance.\n *\n * @param mixed $users\n * @return \\Illuminate\\Mail\\PendingMail\n * @static\n */\n public static function bcc($users)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->bcc($users);\n }\n\n /**\n * Send a new message with only a raw text part.\n *\n * @param string $text\n * @param \\Closure|string $callback\n * @return void\n * @static\n */\n public static function raw($text, $callback)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->raw($text, $callback);\n }\n\n /**\n * Send a new message using a view.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param array $data\n * @param \\Closure|string|null $callback\n * @return mixed|void\n * @static\n */\n public static function send($view, $data = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->send($view, $data, $callback);\n }\n\n /**\n * Send a new message synchronously using a view.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $mailable\n * @param array $data\n * @param \\Closure|string|null $callback\n * @return void\n * @static\n */\n public static function sendNow($mailable, $data = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n $instance->sendNow($mailable, $data, $callback);\n }\n\n /**\n * Queue a new message for sending.\n *\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function queue($view, $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->queue($view, $queue);\n }\n\n /**\n * Queue a new e-mail message for sending after (n) seconds.\n *\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param \\Illuminate\\Contracts\\Mail\\Mailable|string|array $view\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function later($delay, $view, $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\MailFake $instance */\n return $instance->later($delay, $view, $queue);\n }\n\n }\n /**\n * @see \\Illuminate\\Notifications\\ChannelManager\n * @see \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake\n */\n class Notification {\n /**\n * Send the given notification to the given notifiable entities.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $notifiables\n * @param mixed $notification\n * @return void\n * @static\n */\n public static function send($notifiables, $notification)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->send($notifiables, $notification);\n }\n\n /**\n * Send the given notification immediately.\n *\n * @param \\Illuminate\\Support\\Collection|mixed $notifiables\n * @param mixed $notification\n * @param array|null $channels\n * @return void\n * @static\n */\n public static function sendNow($notifiables, $notification, $channels = null)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->sendNow($notifiables, $notification, $channels);\n }\n\n /**\n * Get a channel instance.\n *\n * @param string|null $name\n * @return mixed\n * @static\n */\n public static function channel($name = null)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->channel($name);\n }\n\n /**\n * Get the default channel driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Get the default channel driver name.\n *\n * @return string\n * @static\n */\n public static function deliversVia()\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->deliversVia();\n }\n\n /**\n * Set the default channel driver name.\n *\n * @param string $channel\n * @return void\n * @static\n */\n public static function deliverVia($channel)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n $instance->deliverVia($channel);\n }\n\n /**\n * Set the locale of notifications.\n *\n * @param string $locale\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function locale($locale)\n {\n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->locale($locale);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Notifications\\ChannelManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Notifications\\ChannelManager $instance */\n return $instance->forgetDrivers();\n }\n\n /**\n * Assert if a notification was sent on-demand based on a truth-test callback.\n *\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertSentOnDemand($notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentOnDemand($notification, $callback);\n }\n\n /**\n * Assert if a notification was sent based on a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertSentTo($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentTo($notifiable, $notification, $callback);\n }\n\n /**\n * Assert if a notification was sent on-demand a number of times.\n *\n * @param string $notification\n * @param int $times\n * @return void\n * @static\n */\n public static function assertSentOnDemandTimes($notification, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentOnDemandTimes($notification, $times);\n }\n\n /**\n * Assert if a notification was sent a number of times.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @param int $times\n * @return void\n * @static\n */\n public static function assertSentToTimes($notifiable, $notification, $times = 1)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentToTimes($notifiable, $notification, $times);\n }\n\n /**\n * Determine if a notification was sent based on a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string|\\Closure $notification\n * @param callable|null $callback\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertNotSentTo($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNotSentTo($notifiable, $notification, $callback);\n }\n\n /**\n * Assert that no notifications were sent.\n *\n * @return void\n * @static\n */\n public static function assertNothingSent()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNothingSent();\n }\n\n /**\n * Assert that no notifications were sent to the given notifiable.\n *\n * @param mixed $notifiable\n * @return void\n * @throws \\Exception\n * @static\n */\n public static function assertNothingSentTo($notifiable)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertNothingSentTo($notifiable);\n }\n\n /**\n * Assert the total amount of times a notification was sent.\n *\n * @param string $notification\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertSentTimes($notification, $expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertSentTimes($notification, $expectedCount);\n }\n\n /**\n * Assert the total count of notification that were sent.\n *\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertCount($expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n $instance->assertCount($expectedCount);\n }\n\n /**\n * Get all of the notifications matching a truth-test callback.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function sent($notifiable, $notification, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->sent($notifiable, $notification, $callback);\n }\n\n /**\n * Determine if there are more notifications left to inspect.\n *\n * @param mixed $notifiable\n * @param string $notification\n * @return bool\n * @static\n */\n public static function hasSent($notifiable, $notification)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->hasSent($notifiable, $notification);\n }\n\n /**\n * Specify if notification should be serialized and restored when being \"pushed\" to the queue.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the notifications that have been sent.\n *\n * @return array\n * @static\n */\n public static function sentNotifications()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake $instance */\n return $instance->sentNotifications();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Support\\Testing\\Fakes\\NotificationFake::flushMacros();\n }\n\n }\n /**\n * @method static string sendResetLink(array $credentials, \\Closure|null $callback = null)\n * @method static mixed reset(array $credentials, \\Closure $callback)\n * @method static \\Illuminate\\Contracts\\Auth\\CanResetPassword|null getUser(array $credentials)\n * @method static string createToken(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user)\n * @method static void deleteToken(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user)\n * @method static bool tokenExists(\\Illuminate\\Contracts\\Auth\\CanResetPassword $user, string $token)\n * @method static \\Illuminate\\Auth\\Passwords\\TokenRepositoryInterface getRepository()\n * @method static \\Illuminate\\Support\\Timebox getTimebox()\n * @see \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager\n * @see \\Illuminate\\Auth\\Passwords\\PasswordBroker\n */\n class Password {\n /**\n * Attempt to get the broker from the local cache.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Auth\\PasswordBroker\n * @static\n */\n public static function broker($name = null)\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n return $instance->broker($name);\n }\n\n /**\n * Get the default password broker name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default password broker name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Auth\\Passwords\\PasswordBrokerManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n }\n /**\n * @method static \\Illuminate\\Process\\PendingProcess command(array|string $command)\n * @method static \\Illuminate\\Process\\PendingProcess path(string $path)\n * @method static \\Illuminate\\Process\\PendingProcess timeout(int $timeout)\n * @method static \\Illuminate\\Process\\PendingProcess idleTimeout(int $timeout)\n * @method static \\Illuminate\\Process\\PendingProcess forever()\n * @method static \\Illuminate\\Process\\PendingProcess env(array $environment)\n * @method static \\Illuminate\\Process\\PendingProcess input(\\Traversable|resource|string|int|float|bool|null $input)\n * @method static \\Illuminate\\Process\\PendingProcess quietly()\n * @method static \\Illuminate\\Process\\PendingProcess tty(bool $tty = true)\n * @method static \\Illuminate\\Process\\PendingProcess options(array $options)\n * @method static \\Illuminate\\Contracts\\Process\\ProcessResult run(array|string|null $command = null, callable|null $output = null)\n * @method static \\Illuminate\\Process\\InvokedProcess start(array|string|null $command = null, callable|null $output = null)\n * @method static bool supportsTty()\n * @method static \\Illuminate\\Process\\PendingProcess withFakeHandlers(array $fakeHandlers)\n * @method static \\Illuminate\\Process\\PendingProcess|mixed when(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @method static \\Illuminate\\Process\\PendingProcess|mixed unless(\\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)\n * @see \\Illuminate\\Process\\PendingProcess\n * @see \\Illuminate\\Process\\Factory\n */\n class Process {\n /**\n * Create a new fake process response for testing purposes.\n *\n * @param array|string $output\n * @param array|string $errorOutput\n * @param int $exitCode\n * @return \\Illuminate\\Process\\FakeProcessResult\n * @static\n */\n public static function result($output = '', $errorOutput = '', $exitCode = 0)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->result($output, $errorOutput, $exitCode);\n }\n\n /**\n * Begin describing a fake process lifecycle.\n *\n * @return \\Illuminate\\Process\\FakeProcessDescription\n * @static\n */\n public static function describe()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->describe();\n }\n\n /**\n * Begin describing a fake process sequence.\n *\n * @param array $processes\n * @return \\Illuminate\\Process\\FakeProcessSequence\n * @static\n */\n public static function sequence($processes = [])\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->sequence($processes);\n }\n\n /**\n * Indicate that the process factory should fake processes.\n *\n * @param \\Closure|array|null $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function fake($callback = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->fake($callback);\n }\n\n /**\n * Determine if the process factory has fake process handlers and is recording processes.\n *\n * @return bool\n * @static\n */\n public static function isRecording()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->isRecording();\n }\n\n /**\n * Record the given process if processes should be recorded.\n *\n * @param \\Illuminate\\Process\\PendingProcess $process\n * @param \\Illuminate\\Contracts\\Process\\ProcessResult $result\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function recordIfRecording($process, $result)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->recordIfRecording($process, $result);\n }\n\n /**\n * Record the given process.\n *\n * @param \\Illuminate\\Process\\PendingProcess $process\n * @param \\Illuminate\\Contracts\\Process\\ProcessResult $result\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function record($process, $result)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->record($process, $result);\n }\n\n /**\n * Indicate that an exception should be thrown if any process is not faked.\n *\n * @param bool $prevent\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function preventStrayProcesses($prevent = true)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->preventStrayProcesses($prevent);\n }\n\n /**\n * Determine if stray processes are being prevented.\n *\n * @return bool\n * @static\n */\n public static function preventingStrayProcesses()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->preventingStrayProcesses();\n }\n\n /**\n * Assert that a process was recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertRan($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertRan($callback);\n }\n\n /**\n * Assert that a process was recorded a given number of times matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @param int $times\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertRanTimes($callback, $times = 1)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertRanTimes($callback, $times);\n }\n\n /**\n * Assert that a process was not recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertNotRan($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertNotRan($callback);\n }\n\n /**\n * Assert that a process was not recorded matching a given truth test.\n *\n * @param \\Closure|string $callback\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertDidntRun($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertDidntRun($callback);\n }\n\n /**\n * Assert that no processes were recorded.\n *\n * @return \\Illuminate\\Process\\Factory\n * @static\n */\n public static function assertNothingRan()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->assertNothingRan();\n }\n\n /**\n * Start defining a pool of processes.\n *\n * @param callable $callback\n * @return \\Illuminate\\Process\\Pool\n * @static\n */\n public static function pool($callback)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->pool($callback);\n }\n\n /**\n * Start defining a series of piped processes.\n *\n * @param callable|array $callback\n * @return \\Illuminate\\Contracts\\Process\\ProcessResult\n * @static\n */\n public static function pipe($callback, $output = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->pipe($callback, $output);\n }\n\n /**\n * Run a pool of processes and wait for them to finish executing.\n *\n * @param callable $callback\n * @param callable|null $output\n * @return \\Illuminate\\Process\\ProcessPoolResults\n * @static\n */\n public static function concurrently($callback, $output = null)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->concurrently($callback, $output);\n }\n\n /**\n * Create a new pending process associated with this factory.\n *\n * @return \\Illuminate\\Process\\PendingProcess\n * @static\n */\n public static function newPendingProcess()\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->newPendingProcess();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Process\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Process\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Process\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Process\\Factory::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Process\\Factory $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Queue\\QueueManager\n * @see \\Illuminate\\Queue\\Queue\n * @see \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n */\n class Queue {\n /**\n * Register an event listener for the before job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function before($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->before($callback);\n }\n\n /**\n * Register an event listener for the after job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function after($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->after($callback);\n }\n\n /**\n * Register an event listener for the exception occurred job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function exceptionOccurred($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->exceptionOccurred($callback);\n }\n\n /**\n * Register an event listener for the daemon queue loop.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function looping($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->looping($callback);\n }\n\n /**\n * Register an event listener for the failed job event.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function failing($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->failing($callback);\n }\n\n /**\n * Register an event listener for the daemon queue starting.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function starting($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->starting($callback);\n }\n\n /**\n * Register an event listener for the daemon queue stopping.\n *\n * @param mixed $callback\n * @return void\n * @static\n */\n public static function stopping($callback)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->stopping($callback);\n }\n\n /**\n * Determine if the driver is connected.\n *\n * @param string|null $name\n * @return bool\n * @static\n */\n public static function connected($name = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->connected($name);\n }\n\n /**\n * Resolve a queue connection instance.\n *\n * @param string|null $name\n * @return \\Illuminate\\Contracts\\Queue\\Queue\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Add a queue connection resolver.\n *\n * @param string $driver\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function extend($driver, $resolver)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->extend($driver, $resolver);\n }\n\n /**\n * Add a queue connection resolver.\n *\n * @param string $driver\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function addConnector($driver, $resolver)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->addConnector($driver, $resolver);\n }\n\n /**\n * Get the name of the default queue connection.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the name of the default queue connection.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Get the full name for the given connection.\n *\n * @param string|null $connection\n * @return string\n * @static\n */\n public static function getName($connection = null)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getName($connection);\n }\n\n /**\n * Get the application instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Foundation\\Application\n * @static\n */\n public static function getApplication()\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->getApplication();\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Queue\\QueueManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Queue\\QueueManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Specify the jobs that should be queued instead of faked.\n *\n * @param array|string $jobsToBeQueued\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function except($jobsToBeQueued)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->except($jobsToBeQueued);\n }\n\n /**\n * Assert if a job was pushed based on a truth-test callback.\n *\n * @param string|\\Closure $job\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertPushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushed($job, $callback);\n }\n\n /**\n * Assert if a job was pushed based on a truth-test callback.\n *\n * @param string $queue\n * @param string|\\Closure $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedOn($queue, $job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedOn($queue, $job, $callback);\n }\n\n /**\n * Assert if a job was pushed with chained jobs based on a truth-test callback.\n *\n * @param string $job\n * @param array $expectedChain\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedWithChain($job, $expectedChain = [], $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedWithChain($job, $expectedChain, $callback);\n }\n\n /**\n * Assert if a job was pushed with an empty chain based on a truth-test callback.\n *\n * @param string $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertPushedWithoutChain($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertPushedWithoutChain($job, $callback);\n }\n\n /**\n * Assert if a closure was pushed based on a truth-test callback.\n *\n * @param callable|int|null $callback\n * @return void\n * @static\n */\n public static function assertClosurePushed($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertClosurePushed($callback);\n }\n\n /**\n * Assert that a closure was not pushed based on a truth-test callback.\n *\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertClosureNotPushed($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertClosureNotPushed($callback);\n }\n\n /**\n * Determine if a job was pushed based on a truth-test callback.\n *\n * @param string|\\Closure $job\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function assertNotPushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertNotPushed($job, $callback);\n }\n\n /**\n * Assert the total count of jobs that were pushed.\n *\n * @param int $expectedCount\n * @return void\n * @static\n */\n public static function assertCount($expectedCount)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertCount($expectedCount);\n }\n\n /**\n * Assert that no jobs were pushed.\n *\n * @return void\n * @static\n */\n public static function assertNothingPushed()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n $instance->assertNothingPushed();\n }\n\n /**\n * Get all of the jobs matching a truth-test callback.\n *\n * @param string $job\n * @param callable|null $callback\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function pushed($job, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushed($job, $callback);\n }\n\n /**\n * Get all of the raw pushes matching a truth-test callback.\n *\n * @param null|\\Closure(string, ?string, array): bool $callback\n * @return \\Illuminate\\Support\\Collection<int, RawPushType>\n * @static\n */\n public static function pushedRaw($callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushedRaw($callback);\n }\n\n /**\n * Get all of the jobs by listener class, passing an optional truth-test callback.\n *\n * @param class-string $listenerClass\n * @param (\\Closure(mixed, \\Illuminate\\Events\\CallQueuedListener, string|null, mixed): bool)|null $callback\n * @return \\Illuminate\\Support\\Collection<int, \\Illuminate\\Events\\CallQueuedListener>\n * @static\n */\n public static function listenersPushed($listenerClass, $callback = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->listenersPushed($listenerClass, $callback);\n }\n\n /**\n * Determine if there are any stored jobs for a given class.\n *\n * @param string $job\n * @return bool\n * @static\n */\n public static function hasPushed($job)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->hasPushed($job);\n }\n\n /**\n * Get the size of the queue.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function size($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->size($queue);\n }\n\n /**\n * Get the number of pending jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function pendingSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pendingSize($queue);\n }\n\n /**\n * Get the number of delayed jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function delayedSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->delayedSize($queue);\n }\n\n /**\n * Get the number of reserved jobs.\n *\n * @param string|null $queue\n * @return int\n * @static\n */\n public static function reservedSize($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->reservedSize($queue);\n }\n\n /**\n * Get the creation timestamp of the oldest pending job, excluding delayed jobs.\n *\n * @param string|null $queue\n * @return int|null\n * @static\n */\n public static function creationTimeOfOldestPendingJob($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->creationTimeOfOldestPendingJob($queue);\n }\n\n /**\n * Push a new job onto the queue.\n *\n * @param string|object $job\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function push($job, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->push($job, $data, $queue);\n }\n\n /**\n * Determine if a job should be faked or actually dispatched.\n *\n * @param object $job\n * @return bool\n * @static\n */\n public static function shouldFakeJob($job)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->shouldFakeJob($job);\n }\n\n /**\n * Push a raw payload onto the queue.\n *\n * @param string $payload\n * @param string|null $queue\n * @param array $options\n * @return mixed\n * @static\n */\n public static function pushRaw($payload, $queue = null, $options = [])\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushRaw($payload, $queue, $options);\n }\n\n /**\n * Push a new job onto the queue after (n) seconds.\n *\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param string|object $job\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function later($delay, $job, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->later($delay, $job, $data, $queue);\n }\n\n /**\n * Push a new job onto the queue.\n *\n * @param string $queue\n * @param string|object $job\n * @param mixed $data\n * @return mixed\n * @static\n */\n public static function pushOn($queue, $job, $data = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushOn($queue, $job, $data);\n }\n\n /**\n * Push a new job onto a specific queue after (n) seconds.\n *\n * @param string $queue\n * @param \\DateTimeInterface|\\DateInterval|int $delay\n * @param string|object $job\n * @param mixed $data\n * @return mixed\n * @static\n */\n public static function laterOn($queue, $delay, $job, $data = '')\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->laterOn($queue, $delay, $job, $data);\n }\n\n /**\n * Pop the next job off of the queue.\n *\n * @param string|null $queue\n * @return \\Illuminate\\Contracts\\Queue\\Job|null\n * @static\n */\n public static function pop($queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pop($queue);\n }\n\n /**\n * Push an array of jobs onto the queue.\n *\n * @param array $jobs\n * @param mixed $data\n * @param string|null $queue\n * @return mixed\n * @static\n */\n public static function bulk($jobs, $data = '', $queue = null)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->bulk($jobs, $data, $queue);\n }\n\n /**\n * Get the jobs that have been pushed.\n *\n * @return array\n * @static\n */\n public static function pushedJobs()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->pushedJobs();\n }\n\n /**\n * Get the payloads that were pushed raw.\n *\n * @return list<RawPushType>\n * @static\n */\n public static function rawPushes()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->rawPushes();\n }\n\n /**\n * Specify if jobs should be serialized and restored when being \"pushed\" to the queue.\n *\n * @param bool $serializeAndRestore\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function serializeAndRestore($serializeAndRestore = true)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->serializeAndRestore($serializeAndRestore);\n }\n\n /**\n * Get the connection name for the queue.\n *\n * @return string\n * @static\n */\n public static function getConnectionName()\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->getConnectionName();\n }\n\n /**\n * Set the connection name for the queue.\n *\n * @param string $name\n * @return \\Illuminate\\Support\\Testing\\Fakes\\QueueFake\n * @static\n */\n public static function setConnectionName($name)\n {\n /** @var \\Illuminate\\Support\\Testing\\Fakes\\QueueFake $instance */\n return $instance->setConnectionName($name);\n }\n\n /**\n * Migrate the delayed jobs that are ready to the regular queue.\n *\n * @param string $from\n * @param string $to\n * @return array\n * @static\n */\n public static function migrateExpiredJobs($from, $to)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->migrateExpiredJobs($from, $to);\n }\n\n /**\n * Delete a reserved job from the queue.\n *\n * @param string $queue\n * @param \\Illuminate\\Queue\\Jobs\\RedisJob $job\n * @return void\n * @static\n */\n public static function deleteReserved($queue, $job)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->deleteReserved($queue, $job);\n }\n\n /**\n * Delete a reserved job from the reserved queue and release it.\n *\n * @param string $queue\n * @param \\Illuminate\\Queue\\Jobs\\RedisJob $job\n * @param int $delay\n * @return void\n * @static\n */\n public static function deleteAndRelease($queue, $job, $delay)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->deleteAndRelease($queue, $job, $delay);\n }\n\n /**\n * Delete all of the jobs from the queue.\n *\n * @param string $queue\n * @return int\n * @static\n */\n public static function clear($queue)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->clear($queue);\n }\n\n /**\n * Get the queue or return the default.\n *\n * @param string|null $queue\n * @return string\n * @static\n */\n public static function getQueue($queue)\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getQueue($queue);\n }\n\n /**\n * Get the connection for the queue.\n *\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function getConnection()\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getConnection();\n }\n\n /**\n * Get the underlying Redis instance.\n *\n * @return \\Illuminate\\Contracts\\Redis\\Factory\n * @static\n */\n public static function getRedis()\n {\n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getRedis();\n }\n\n /**\n * Get the maximum number of attempts for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobTries($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobTries($job);\n }\n\n /**\n * Get the backoff for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobBackoff($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobBackoff($job);\n }\n\n /**\n * Get the expiration timestamp for an object-based queue handler.\n *\n * @param mixed $job\n * @return mixed\n * @static\n */\n public static function getJobExpiration($job)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getJobExpiration($job);\n }\n\n /**\n * Register a callback to be executed when creating job payloads.\n *\n * @param callable|null $callback\n * @return void\n * @static\n */\n public static function createPayloadUsing($callback)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n \\Illuminate\\Queue\\RedisQueue::createPayloadUsing($callback);\n }\n\n /**\n * Get the container instance being used by the connection.\n *\n * @return \\Illuminate\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the IoC container instance.\n *\n * @param \\Illuminate\\Container\\Container $container\n * @return void\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Queue\\Queue \n /** @var \\Illuminate\\Queue\\RedisQueue $instance */\n $instance->setContainer($container);\n }\n\n }\n /**\n * @see \\Illuminate\\Cache\\RateLimiter\n */\n class RateLimiter {\n /**\n * Register a named limiter configuration.\n *\n * @param \\BackedEnum|\\UnitEnum|string $name\n * @param \\Closure $callback\n * @return \\Illuminate\\Cache\\RateLimiter\n * @static\n */\n public static function for($name, $callback)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->for($name, $callback);\n }\n\n /**\n * Get the given named rate limiter.\n *\n * @param \\BackedEnum|\\UnitEnum|string $name\n * @return \\Closure|null\n * @static\n */\n public static function limiter($name)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->limiter($name);\n }\n\n /**\n * Attempts to execute a callback if it's not limited.\n *\n * @param string $key\n * @param int $maxAttempts\n * @param \\Closure $callback\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @return mixed\n * @static\n */\n public static function attempt($key, $maxAttempts, $callback, $decaySeconds = 60)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->attempt($key, $maxAttempts, $callback, $decaySeconds);\n }\n\n /**\n * Determine if the given key has been \"accessed\" too many times.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return bool\n * @static\n */\n public static function tooManyAttempts($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->tooManyAttempts($key, $maxAttempts);\n }\n\n /**\n * Increment (by 1) the counter for a given key for a given decay time.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @return int\n * @static\n */\n public static function hit($key, $decaySeconds = 60)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->hit($key, $decaySeconds);\n }\n\n /**\n * Increment the counter for a given key for a given decay time by a given amount.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @param int $amount\n * @return int\n * @static\n */\n public static function increment($key, $decaySeconds = 60, $amount = 1)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->increment($key, $decaySeconds, $amount);\n }\n\n /**\n * Decrement the counter for a given key for a given decay time by a given amount.\n *\n * @param string $key\n * @param \\DateTimeInterface|\\DateInterval|int $decaySeconds\n * @param int $amount\n * @return int\n * @static\n */\n public static function decrement($key, $decaySeconds = 60, $amount = 1)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->decrement($key, $decaySeconds, $amount);\n }\n\n /**\n * Get the number of attempts for the given key.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function attempts($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->attempts($key);\n }\n\n /**\n * Reset the number of attempts for the given key.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function resetAttempts($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->resetAttempts($key);\n }\n\n /**\n * Get the number of retries left for the given key.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return int\n * @static\n */\n public static function remaining($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->remaining($key, $maxAttempts);\n }\n\n /**\n * Get the number of retries left for the given key.\n *\n * @param string $key\n * @param int $maxAttempts\n * @return int\n * @static\n */\n public static function retriesLeft($key, $maxAttempts)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->retriesLeft($key, $maxAttempts);\n }\n\n /**\n * Clear the hits and lockout timer for the given key.\n *\n * @param string $key\n * @return void\n * @static\n */\n public static function clear($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n $instance->clear($key);\n }\n\n /**\n * Get the number of seconds until the \"key\" is accessible again.\n *\n * @param string $key\n * @return int\n * @static\n */\n public static function availableIn($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->availableIn($key);\n }\n\n /**\n * Clean the rate limiter key from unicode characters.\n *\n * @param string $key\n * @return string\n * @static\n */\n public static function cleanRateLimiterKey($key)\n {\n /** @var \\Illuminate\\Cache\\RateLimiter $instance */\n return $instance->cleanRateLimiterKey($key);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\Redirector\n */\n class Redirect {\n /**\n * Create a new redirect response to the previous location.\n *\n * @param int $status\n * @param array $headers\n * @param mixed $fallback\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function back($status = 302, $headers = [], $fallback = false)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->back($status, $headers, $fallback);\n }\n\n /**\n * Create a new redirect response to the current URI.\n *\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function refresh($status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->refresh($status, $headers);\n }\n\n /**\n * Create a new redirect response, while putting the current URL in the session.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function guest($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->guest($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the previously intended location.\n *\n * @param mixed $default\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function intended($default = '/', $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->intended($default, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the given path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function to($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->to($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to an external URL (no validation).\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function away($path, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->away($path, $status, $headers);\n }\n\n /**\n * Create a new redirect response to the given HTTPS path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function secure($path, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->secure($path, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function route($route, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->route($route, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a signed named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function signedRoute($route, $parameters = [], $expiration = null, $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->signedRoute($route, $parameters, $expiration, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a signed named route.\n *\n * @param \\BackedEnum|string $route\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function temporarySignedRoute($route, $expiration, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->temporarySignedRoute($route, $expiration, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a controller action.\n *\n * @param string|array $action\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function action($action, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->action($action, $parameters, $status, $headers);\n }\n\n /**\n * Get the URL generator instance.\n *\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function getUrlGenerator()\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->getUrlGenerator();\n }\n\n /**\n * Set the active session store.\n *\n * @param \\Illuminate\\Session\\Store $session\n * @return void\n * @static\n */\n public static function setSession($session)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n $instance->setSession($session);\n }\n\n /**\n * Get the \"intended\" URL from the session.\n *\n * @return string|null\n * @static\n */\n public static function getIntendedUrl()\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->getIntendedUrl();\n }\n\n /**\n * Set the \"intended\" URL in the session.\n *\n * @param string $url\n * @return \\Illuminate\\Routing\\Redirector\n * @static\n */\n public static function setIntendedUrl($url)\n {\n /** @var \\Illuminate\\Routing\\Redirector $instance */\n return $instance->setIntendedUrl($url);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\Redirector::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\Redirector::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\Redirector::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\Redirector::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Http\\Request\n */\n class Request {\n /**\n * Create a new Illuminate HTTP request from server variables.\n *\n * @return static\n * @static\n */\n public static function capture()\n {\n return \\Illuminate\\Http\\Request::capture();\n }\n\n /**\n * Return the Request instance.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function instance()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->instance();\n }\n\n /**\n * Get the request method.\n *\n * @return string\n * @static\n */\n public static function method()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->method();\n }\n\n /**\n * Get a URI instance for the request.\n *\n * @return \\Illuminate\\Support\\Uri\n * @static\n */\n public static function uri()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->uri();\n }\n\n /**\n * Get the root URL for the application.\n *\n * @return string\n * @static\n */\n public static function root()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->root();\n }\n\n /**\n * Get the URL (no query string) for the request.\n *\n * @return string\n * @static\n */\n public static function url()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->url();\n }\n\n /**\n * Get the full URL for the request.\n *\n * @return string\n * @static\n */\n public static function fullUrl()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrl();\n }\n\n /**\n * Get the full URL for the request with the added query string parameters.\n *\n * @param array $query\n * @return string\n * @static\n */\n public static function fullUrlWithQuery($query)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlWithQuery($query);\n }\n\n /**\n * Get the full URL for the request without the given query string parameters.\n *\n * @param array|string $keys\n * @return string\n * @static\n */\n public static function fullUrlWithoutQuery($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlWithoutQuery($keys);\n }\n\n /**\n * Get the current path info for the request.\n *\n * @return string\n * @static\n */\n public static function path()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->path();\n }\n\n /**\n * Get the current decoded path info for the request.\n *\n * @return string\n * @static\n */\n public static function decodedPath()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->decodedPath();\n }\n\n /**\n * Get a segment from the URI (1 based index).\n *\n * @param int $index\n * @param string|null $default\n * @return string|null\n * @static\n */\n public static function segment($index, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->segment($index, $default);\n }\n\n /**\n * Get all of the segments for the request path.\n *\n * @return array\n * @static\n */\n public static function segments()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->segments();\n }\n\n /**\n * Determine if the current request URI matches a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function is(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->is(...$patterns);\n }\n\n /**\n * Determine if the route name matches a given pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function routeIs(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->routeIs(...$patterns);\n }\n\n /**\n * Determine if the current request URL and query string match a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function fullUrlIs(...$patterns)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fullUrlIs(...$patterns);\n }\n\n /**\n * Get the host name.\n *\n * @return string\n * @static\n */\n public static function host()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->host();\n }\n\n /**\n * Get the HTTP host being requested.\n *\n * @return string\n * @static\n */\n public static function httpHost()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->httpHost();\n }\n\n /**\n * Get the scheme and HTTP host.\n *\n * @return string\n * @static\n */\n public static function schemeAndHttpHost()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->schemeAndHttpHost();\n }\n\n /**\n * Determine if the request is the result of an AJAX call.\n *\n * @return bool\n * @static\n */\n public static function ajax()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ajax();\n }\n\n /**\n * Determine if the request is the result of a PJAX call.\n *\n * @return bool\n * @static\n */\n public static function pjax()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->pjax();\n }\n\n /**\n * Determine if the request is the result of a prefetch call.\n *\n * @return bool\n * @static\n */\n public static function prefetch()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->prefetch();\n }\n\n /**\n * Determine if the request is over HTTPS.\n *\n * @return bool\n * @static\n */\n public static function secure()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->secure();\n }\n\n /**\n * Get the client IP address.\n *\n * @return string|null\n * @static\n */\n public static function ip()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ip();\n }\n\n /**\n * Get the client IP addresses.\n *\n * @return array\n * @static\n */\n public static function ips()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->ips();\n }\n\n /**\n * Get the client user agent.\n *\n * @return string|null\n * @static\n */\n public static function userAgent()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->userAgent();\n }\n\n /**\n * Merge new input into the current request's input array.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function merge($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->merge($input);\n }\n\n /**\n * Merge new input into the request's input, but only when that key is missing from the request.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function mergeIfMissing($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->mergeIfMissing($input);\n }\n\n /**\n * Replace the input values for the current request.\n *\n * @param array $input\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function replace($input)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->replace($input);\n }\n\n /**\n * This method belongs to Symfony HttpFoundation and is not usually needed when using Laravel.\n * \n * Instead, you may use the \"input\" method.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get the JSON payload for the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return ($key is null ? \\Symfony\\Component\\HttpFoundation\\InputBag : mixed)\n * @static\n */\n public static function json($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->json($key, $default);\n }\n\n /**\n * Create a new request instance from the given Laravel request.\n *\n * @param \\Illuminate\\Http\\Request $from\n * @param \\Illuminate\\Http\\Request|null $to\n * @return static\n * @static\n */\n public static function createFrom($from, $to = null)\n {\n return \\Illuminate\\Http\\Request::createFrom($from, $to);\n }\n\n /**\n * Create an Illuminate request from a Symfony instance.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @return static\n * @static\n */\n public static function createFromBase($request)\n {\n return \\Illuminate\\Http\\Request::createFromBase($request);\n }\n\n /**\n * Clones a request and overrides some of its parameters.\n *\n * @return static\n * @param array|null $query The GET parameters\n * @param array|null $request The POST parameters\n * @param array|null $attributes The request attributes (parameters parsed from the PATH_INFO, ...)\n * @param array|null $cookies The COOKIE parameters\n * @param array|null $files The FILES parameters\n * @param array|null $server The SERVER parameters\n * @static\n */\n public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->duplicate($query, $request, $attributes, $cookies, $files, $server);\n }\n\n /**\n * Whether the request contains a Session object.\n * \n * This method does not give any information about the state of the session object,\n * like whether the session is started or not. It is just a way to check if this Request\n * is associated with a Session instance.\n *\n * @param bool $skipIfUninitialized When true, ignores factories injected by `setSessionFactory`\n * @static\n */\n public static function hasSession($skipIfUninitialized = false)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasSession($skipIfUninitialized);\n }\n\n /**\n * Gets the Session.\n *\n * @throws SessionNotFoundException When session is not set properly\n * @static\n */\n public static function getSession()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getSession();\n }\n\n /**\n * Get the session associated with the request.\n *\n * @return \\Illuminate\\Contracts\\Session\\Session\n * @throws \\RuntimeException\n * @static\n */\n public static function session()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->session();\n }\n\n /**\n * Set the session instance on the request.\n *\n * @param \\Illuminate\\Contracts\\Session\\Session $session\n * @return void\n * @static\n */\n public static function setLaravelSession($session)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setLaravelSession($session);\n }\n\n /**\n * Set the locale for the request instance.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setRequestLocale($locale)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setRequestLocale($locale);\n }\n\n /**\n * Set the default locale for the request instance.\n *\n * @param string $locale\n * @return void\n * @static\n */\n public static function setDefaultRequestLocale($locale)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->setDefaultRequestLocale($locale);\n }\n\n /**\n * Get the user making the request.\n *\n * @param string|null $guard\n * @return mixed\n * @static\n */\n public static function user($guard = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->user($guard);\n }\n\n /**\n * Get the route handling the request.\n *\n * @param string|null $param\n * @param mixed $default\n * @return ($param is null ? \\Illuminate\\Routing\\Route : object|string|null)\n * @static\n */\n public static function route($param = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->route($param, $default);\n }\n\n /**\n * Get a unique fingerprint for the request / route / IP address.\n *\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function fingerprint()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fingerprint();\n }\n\n /**\n * Set the JSON payload for the request.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\InputBag $json\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setJson($json)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setJson($json);\n }\n\n /**\n * Get the user resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function getUserResolver()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUserResolver();\n }\n\n /**\n * Set the user resolver callback.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setUserResolver($callback)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setUserResolver($callback);\n }\n\n /**\n * Get the route resolver callback.\n *\n * @return \\Closure\n * @static\n */\n public static function getRouteResolver()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRouteResolver();\n }\n\n /**\n * Set the route resolver callback.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function setRouteResolver($callback)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setRouteResolver($callback);\n }\n\n /**\n * Get all of the input and files for the request.\n *\n * @return array\n * @static\n */\n public static function toArray()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->toArray();\n }\n\n /**\n * Determine if the given offset exists.\n *\n * @param string $offset\n * @return bool\n * @static\n */\n public static function offsetExists($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->offsetExists($offset);\n }\n\n /**\n * Get the value at the given offset.\n *\n * @param string $offset\n * @return mixed\n * @static\n */\n public static function offsetGet($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->offsetGet($offset);\n }\n\n /**\n * Set the value at the given offset.\n *\n * @param string $offset\n * @param mixed $value\n * @return void\n * @static\n */\n public static function offsetSet($offset, $value)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->offsetSet($offset, $value);\n }\n\n /**\n * Remove the value at the given offset.\n *\n * @param string $offset\n * @return void\n * @static\n */\n public static function offsetUnset($offset)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->offsetUnset($offset);\n }\n\n /**\n * Sets the parameters for this request.\n * \n * This method also re-initializes all properties.\n *\n * @param array $query The GET parameters\n * @param array $request The POST parameters\n * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...)\n * @param array $cookies The COOKIE parameters\n * @param array $files The FILES parameters\n * @param array $server The SERVER parameters\n * @param string|resource|null $content The raw body data\n * @static\n */\n public static function initialize($query = [], $request = [], $attributes = [], $cookies = [], $files = [], $server = [], $content = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->initialize($query, $request, $attributes, $cookies, $files, $server, $content);\n }\n\n /**\n * Creates a new request with values from PHP's super globals.\n *\n * @static\n */\n public static function createFromGlobals()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::createFromGlobals();\n }\n\n /**\n * Creates a Request based on a given URI and configuration.\n * \n * The information contained in the URI always take precedence\n * over the other information (server and parameters).\n *\n * @param string $uri The URI\n * @param string $method The HTTP method\n * @param array $parameters The query (GET) or request (POST) parameters\n * @param array $cookies The request cookies ($_COOKIE)\n * @param array $files The request files ($_FILES)\n * @param array $server The server parameters ($_SERVER)\n * @param string|resource|null $content The raw body data\n * @throws BadRequestException When the URI is invalid\n * @static\n */\n public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::create($uri, $method, $parameters, $cookies, $files, $server, $content);\n }\n\n /**\n * Sets a callable able to create a Request instance.\n * \n * This is mainly useful when you need to override the Request class\n * to keep BC with an existing system. It should not be used for any\n * other purpose.\n *\n * @static\n */\n public static function setFactory($callable)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setFactory($callable);\n }\n\n /**\n * Overrides the PHP global variables according to this request instance.\n * \n * It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE.\n * $_FILES is never overridden, see rfc1867\n *\n * @static\n */\n public static function overrideGlobals()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->overrideGlobals();\n }\n\n /**\n * Sets a list of trusted proxies.\n * \n * You should only list the reverse proxies that you manage directly.\n *\n * @param array $proxies A list of trusted proxies, the string 'REMOTE_ADDR' will be replaced with $_SERVER['REMOTE_ADDR'] and 'PRIVATE_SUBNETS' by IpUtils::PRIVATE_SUBNETS\n * @param int-mask-of<Request::HEADER_*> $trustedHeaderSet A bit field to set which headers to trust from your proxies\n * @static\n */\n public static function setTrustedProxies($proxies, $trustedHeaderSet)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setTrustedProxies($proxies, $trustedHeaderSet);\n }\n\n /**\n * Gets the list of trusted proxies.\n *\n * @return string[]\n * @static\n */\n public static function getTrustedProxies()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedProxies();\n }\n\n /**\n * Gets the set of trusted headers from trusted proxies.\n *\n * @return int A bit field of Request::HEADER_* that defines which headers are trusted from your proxies\n * @static\n */\n public static function getTrustedHeaderSet()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedHeaderSet();\n }\n\n /**\n * Sets a list of trusted host patterns.\n * \n * You should only list the hosts you manage using regexs.\n *\n * @param array $hostPatterns A list of trusted host patterns\n * @static\n */\n public static function setTrustedHosts($hostPatterns)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setTrustedHosts($hostPatterns);\n }\n\n /**\n * Gets the list of trusted host patterns.\n *\n * @return string[]\n * @static\n */\n public static function getTrustedHosts()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getTrustedHosts();\n }\n\n /**\n * Normalizes a query string.\n * \n * It builds a normalized query string, where keys/value pairs are alphabetized,\n * have consistent escaping and unneeded delimiters are removed.\n *\n * @static\n */\n public static function normalizeQueryString($qs)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::normalizeQueryString($qs);\n }\n\n /**\n * Enables support for the _method request parameter to determine the intended HTTP method.\n * \n * Be warned that enabling this feature might lead to CSRF issues in your code.\n * Check that you are using CSRF tokens when required.\n * If the HTTP method parameter override is enabled, an html-form with method \"POST\" can be altered\n * and used to send a \"PUT\" or \"DELETE\" request via the _method request parameter.\n * If these methods are not protected against CSRF, this presents a possible vulnerability.\n * \n * The HTTP method can only be overridden when the real HTTP method is POST.\n *\n * @static\n */\n public static function enableHttpMethodParameterOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::enableHttpMethodParameterOverride();\n }\n\n /**\n * Checks whether support for the _method request parameter is enabled.\n *\n * @static\n */\n public static function getHttpMethodParameterOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getHttpMethodParameterOverride();\n }\n\n /**\n * Sets the list of HTTP methods that can be overridden.\n * \n * Set to null to allow all methods to be overridden (default). Set to an\n * empty array to disallow overrides entirely. Otherwise, provide the list\n * of uppercased method names that are allowed.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\uppercase-string[]|null $methods\n * @static\n */\n public static function setAllowedHttpMethodOverride($methods)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::setAllowedHttpMethodOverride($methods);\n }\n\n /**\n * Gets the list of HTTP methods that can be overridden.\n *\n * @return \\Symfony\\Component\\HttpFoundation\\uppercase-string[]|null\n * @static\n */\n public static function getAllowedHttpMethodOverride()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getAllowedHttpMethodOverride();\n }\n\n /**\n * Whether the request contains a Session which was started in one of the\n * previous requests.\n *\n * @static\n */\n public static function hasPreviousSession()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasPreviousSession();\n }\n\n /**\n * @static\n */\n public static function setSession($session)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setSession($session);\n }\n\n /**\n * @internal\n * @param callable(): SessionInterface $factory\n * @static\n */\n public static function setSessionFactory($factory)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setSessionFactory($factory);\n }\n\n /**\n * Returns the client IP addresses.\n * \n * In the returned array the most trusted IP address is first, and the\n * least trusted one last. The \"real\" client IP address is the last one,\n * but this is also the least trusted one. Trusted proxies are stripped.\n * \n * Use this method carefully; you should use getClientIp() instead.\n *\n * @see getClientIp()\n * @static\n */\n public static function getClientIps()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getClientIps();\n }\n\n /**\n * Returns the client IP address.\n * \n * This method can read the client IP address from the \"X-Forwarded-For\" header\n * when trusted proxies were set via \"setTrustedProxies()\". The \"X-Forwarded-For\"\n * header value is a comma+space separated list of IP addresses, the left-most\n * being the original client, and each successive proxy that passed the request\n * adding the IP address where it received the request from.\n * \n * If your reverse proxy uses a different header name than \"X-Forwarded-For\",\n * (\"Client-Ip\" for instance), configure it via the $trustedHeaderSet\n * argument of the Request::setTrustedProxies() method instead.\n *\n * @see getClientIps()\n * @see https://wikipedia.org/wiki/X-Forwarded-For\n * @static\n */\n public static function getClientIp()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getClientIp();\n }\n\n /**\n * Returns current script name.\n *\n * @static\n */\n public static function getScriptName()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getScriptName();\n }\n\n /**\n * Returns the path being requested relative to the executed script.\n * \n * The path info always starts with a /.\n * \n * Suppose this request is instantiated from /mysite on localhost:\n * \n * * http://localhost/mysite returns an empty string\n * * http://localhost/mysite/about returns '/about'\n * * http://localhost/mysite/enco%20ded returns '/enco%20ded'\n * * http://localhost/mysite/about?var=1 returns '/about'\n *\n * @return string The raw path (i.e. not urldecoded)\n * @static\n */\n public static function getPathInfo()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPathInfo();\n }\n\n /**\n * Returns the root path from which this request is executed.\n * \n * Suppose that an index.php file instantiates this request object:\n * \n * * http://localhost/index.php returns an empty string\n * * http://localhost/index.php/page returns an empty string\n * * http://localhost/web/index.php returns '/web'\n * * http://localhost/we%20b/index.php returns '/we%20b'\n *\n * @return string The raw path (i.e. not urldecoded)\n * @static\n */\n public static function getBasePath()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getBasePath();\n }\n\n /**\n * Returns the root URL from which this request is executed.\n * \n * The base URL never ends with a /.\n * \n * This is similar to getBasePath(), except that it also includes the\n * script filename (e.g. index.php) if one exists.\n *\n * @return string The raw URL (i.e. not urldecoded)\n * @static\n */\n public static function getBaseUrl()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getBaseUrl();\n }\n\n /**\n * Gets the request's scheme.\n *\n * @static\n */\n public static function getScheme()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getScheme();\n }\n\n /**\n * Returns the port on which the request is made.\n * \n * This method can read the client port from the \"X-Forwarded-Port\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Port\" header must contain the client port.\n *\n * @return int|string|null Can be a string if fetched from the server bag\n * @static\n */\n public static function getPort()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPort();\n }\n\n /**\n * Returns the user.\n *\n * @static\n */\n public static function getUser()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUser();\n }\n\n /**\n * Returns the password.\n *\n * @static\n */\n public static function getPassword()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPassword();\n }\n\n /**\n * Gets the user info.\n *\n * @return string|null A user name if any and, optionally, scheme-specific information about how to gain authorization to access the server\n * @static\n */\n public static function getUserInfo()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUserInfo();\n }\n\n /**\n * Returns the HTTP host being requested.\n * \n * The port name will be appended to the host if it's non-standard.\n *\n * @static\n */\n public static function getHttpHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getHttpHost();\n }\n\n /**\n * Returns the requested URI (path and query string).\n *\n * @return string The raw URI (i.e. not URI decoded)\n * @static\n */\n public static function getRequestUri()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRequestUri();\n }\n\n /**\n * Gets the scheme and HTTP host.\n * \n * If the URL was called with basic authentication, the user\n * and the password are not added to the generated string.\n *\n * @static\n */\n public static function getSchemeAndHttpHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getSchemeAndHttpHost();\n }\n\n /**\n * Generates a normalized URI (URL) for the Request.\n *\n * @see getQueryString()\n * @static\n */\n public static function getUri()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUri();\n }\n\n /**\n * Generates a normalized URI for the given path.\n *\n * @param string $path A path to use instead of the current one\n * @static\n */\n public static function getUriForPath($path)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getUriForPath($path);\n }\n\n /**\n * Returns the path as relative reference from the current Request path.\n * \n * Only the URIs path component (no schema, host etc.) is relevant and must be given.\n * Both paths must be absolute and not contain relative parts.\n * Relative URLs from one resource to another are useful when generating self-contained downloadable document archives.\n * Furthermore, they can be used to reduce the link size in documents.\n * \n * Example target paths, given a base path of \"/a/b/c/d\":\n * - \"/a/b/c/d\" -> \"\"\n * - \"/a/b/c/\" -> \"./\"\n * - \"/a/b/\" -> \"../\"\n * - \"/a/b/c/other\" -> \"other\"\n * - \"/a/x/y\" -> \"../../x/y\"\n *\n * @static\n */\n public static function getRelativeUriForPath($path)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRelativeUriForPath($path);\n }\n\n /**\n * Generates the normalized query string for the Request.\n * \n * It builds a normalized query string, where keys/value pairs are alphabetized\n * and have consistent escaping.\n *\n * @static\n */\n public static function getQueryString()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getQueryString();\n }\n\n /**\n * Checks whether the request is secure or not.\n * \n * This method can read the client protocol from the \"X-Forwarded-Proto\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Proto\" header must contain the protocol: \"https\" or \"http\".\n *\n * @static\n */\n public static function isSecure()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isSecure();\n }\n\n /**\n * Returns the host name.\n * \n * This method can read the client host name from the \"X-Forwarded-Host\" header\n * when trusted proxies were set via \"setTrustedProxies()\".\n * \n * The \"X-Forwarded-Host\" header must contain the client host name.\n *\n * @throws SuspiciousOperationException when the host name is invalid or not trusted\n * @static\n */\n public static function getHost()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getHost();\n }\n\n /**\n * Sets the request method.\n *\n * @static\n */\n public static function setMethod($method)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setMethod($method);\n }\n\n /**\n * Gets the request \"intended\" method.\n * \n * If the X-HTTP-Method-Override header is set, and if the method is a POST,\n * then it is used to determine the \"real\" intended HTTP method.\n * \n * The _method request parameter can also be used to determine the HTTP method,\n * but only if enableHttpMethodParameterOverride() has been called.\n * \n * The method is always an uppercased string.\n *\n * @see getRealMethod()\n * @static\n */\n public static function getMethod()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getMethod();\n }\n\n /**\n * Gets the \"real\" request method.\n *\n * @see getMethod()\n * @static\n */\n public static function getRealMethod()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRealMethod();\n }\n\n /**\n * Gets the mime type associated with the format.\n *\n * @static\n */\n public static function getMimeType($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getMimeType($format);\n }\n\n /**\n * Gets the mime types associated with the format.\n *\n * @return string[]\n * @static\n */\n public static function getMimeTypes($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n return \\Illuminate\\Http\\Request::getMimeTypes($format);\n }\n\n /**\n * Gets the format associated with the mime type.\n * \n * Resolution order:\n * 1) Exact match on the full MIME type (e.g. \"application/json\").\n * 2) Match on the canonical MIME type (i.e. before the first \";\" parameter).\n * 3) If the type is \"application/*+suffix\", use the structured syntax suffix\n * mapping (e.g. \"application/foo+json\" → \"json\"), when available.\n * 4) If $subtypeFallback is true and no match was found:\n * - return the MIME subtype (without \"x-\" prefix), provided it does not\n * contain a \"+\" (e.g. \"application/x-yaml\" → \"yaml\", \"text/csv\" → \"csv\").\n *\n * @param string|null $mimeType The mime type to check\n * @param bool $subtypeFallback Whether to fall back to the subtype if no exact match is found\n * @static\n */\n public static function getFormat($mimeType)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getFormat($mimeType);\n }\n\n /**\n * Associates a format with mime types.\n *\n * @param string $format The format to set\n * @param string|string[] $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type)\n * @static\n */\n public static function setFormat($format, $mimeTypes)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setFormat($format, $mimeTypes);\n }\n\n /**\n * Gets the request format.\n * \n * Here is the process to determine the format:\n * \n * * format defined by the user (with setRequestFormat())\n * * _format request attribute\n * * $default\n *\n * @see getPreferredFormat\n * @static\n */\n public static function getRequestFormat($default = 'html')\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getRequestFormat($default);\n }\n\n /**\n * Sets the request format.\n *\n * @static\n */\n public static function setRequestFormat($format)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setRequestFormat($format);\n }\n\n /**\n * Gets the usual name of the format associated with the request's media type (provided in the Content-Type header).\n *\n * @see Request::$formats\n * @static\n */\n public static function getContentTypeFormat()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getContentTypeFormat();\n }\n\n /**\n * Sets the default locale.\n *\n * @static\n */\n public static function setDefaultLocale($locale)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setDefaultLocale($locale);\n }\n\n /**\n * Get the default locale.\n *\n * @static\n */\n public static function getDefaultLocale()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getDefaultLocale();\n }\n\n /**\n * Sets the locale.\n *\n * @static\n */\n public static function setLocale($locale)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->setLocale($locale);\n }\n\n /**\n * Get the locale.\n *\n * @static\n */\n public static function getLocale()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getLocale();\n }\n\n /**\n * Checks if the request method is of specified type.\n *\n * @param string $method Uppercase request method (GET, POST etc)\n * @static\n */\n public static function isMethod($method)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethod($method);\n }\n\n /**\n * Checks whether or not the method is safe.\n *\n * @see https://tools.ietf.org/html/rfc7231#section-4.2.1\n * @static\n */\n public static function isMethodSafe()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodSafe();\n }\n\n /**\n * Checks whether or not the method is idempotent.\n *\n * @static\n */\n public static function isMethodIdempotent()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodIdempotent();\n }\n\n /**\n * Checks whether the method is cacheable or not.\n *\n * @see https://tools.ietf.org/html/rfc7231#section-4.2.3\n * @static\n */\n public static function isMethodCacheable()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isMethodCacheable();\n }\n\n /**\n * Returns the protocol version.\n * \n * If the application is behind a proxy, the protocol version used in the\n * requests between the client and the proxy and between the proxy and the\n * server might be different. This returns the former (from the \"Via\" header)\n * if the proxy is trusted (see \"setTrustedProxies()\"), otherwise it returns\n * the latter (from the \"SERVER_PROTOCOL\" server parameter).\n *\n * @static\n */\n public static function getProtocolVersion()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getProtocolVersion();\n }\n\n /**\n * Returns the request body content.\n *\n * @param bool $asResource If true, a resource will be returned\n * @return string|resource\n * @psalm-return ($asResource is true ? resource : string)\n * @static\n */\n public static function getContent($asResource = false)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getContent($asResource);\n }\n\n /**\n * Gets the decoded form or json request body.\n *\n * @throws JsonException When the body cannot be decoded to an array\n * @static\n */\n public static function getPayload()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPayload();\n }\n\n /**\n * Gets the Etags.\n *\n * @static\n */\n public static function getETags()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getETags();\n }\n\n /**\n * @static\n */\n public static function isNoCache()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isNoCache();\n }\n\n /**\n * Gets the preferred format for the response by inspecting, in the following order:\n * * the request format set using setRequestFormat;\n * * the values of the Accept HTTP header.\n * \n * Note that if you use this method, you should send the \"Vary: Accept\" header\n * in the response to prevent any issues with intermediary HTTP caches.\n *\n * @static\n */\n public static function getPreferredFormat($default = 'html')\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPreferredFormat($default);\n }\n\n /**\n * Returns the preferred language.\n *\n * @param string[] $locales An array of ordered available locales\n * @static\n */\n public static function getPreferredLanguage($locales = null)\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getPreferredLanguage($locales);\n }\n\n /**\n * Gets a list of languages acceptable by the client browser ordered in the user browser preferences.\n *\n * @return string[]\n * @static\n */\n public static function getLanguages()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getLanguages();\n }\n\n /**\n * Gets a list of charsets acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getCharsets()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getCharsets();\n }\n\n /**\n * Gets a list of encodings acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getEncodings()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getEncodings();\n }\n\n /**\n * Gets a list of content types acceptable by the client browser in preferable order.\n *\n * @return string[]\n * @static\n */\n public static function getAcceptableContentTypes()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->getAcceptableContentTypes();\n }\n\n /**\n * Returns true if the request is an XMLHttpRequest.\n * \n * It works if your JavaScript library sets an X-Requested-With HTTP header.\n * It is known to work with common JavaScript frameworks:\n *\n * @see https://wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript\n * @static\n */\n public static function isXmlHttpRequest()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isXmlHttpRequest();\n }\n\n /**\n * Checks whether the client browser prefers safe content or not according to RFC8674.\n *\n * @see https://tools.ietf.org/html/rfc8674\n * @static\n */\n public static function preferSafeContent()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->preferSafeContent();\n }\n\n /**\n * Indicates whether this request originated from a trusted proxy.\n * \n * This can be useful to determine whether or not to trust the\n * contents of a proxy-specific header.\n *\n * @static\n */\n public static function isFromTrustedProxy()\n {\n //Method inherited from \\Symfony\\Component\\HttpFoundation\\Request \n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isFromTrustedProxy();\n }\n\n /**\n * Filter the given array of rules into an array of rules that are included in precognitive headers.\n *\n * @param array $rules\n * @return array\n * @static\n */\n public static function filterPrecognitiveRules($rules)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->filterPrecognitiveRules($rules);\n }\n\n /**\n * Determine if the request is attempting to be precognitive.\n *\n * @return bool\n * @static\n */\n public static function isAttemptingPrecognition()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isAttemptingPrecognition();\n }\n\n /**\n * Determine if the request is precognitive.\n *\n * @return bool\n * @static\n */\n public static function isPrecognitive()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isPrecognitive();\n }\n\n /**\n * Determine if the request is sending JSON.\n *\n * @return bool\n * @static\n */\n public static function isJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isJson();\n }\n\n /**\n * Determine if the current request probably expects a JSON response.\n *\n * @return bool\n * @static\n */\n public static function expectsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->expectsJson();\n }\n\n /**\n * Determine if the current request is asking for JSON.\n *\n * @return bool\n * @static\n */\n public static function wantsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->wantsJson();\n }\n\n /**\n * Determines whether the current requests accepts a given content type.\n *\n * @param string|array $contentTypes\n * @return bool\n * @static\n */\n public static function accepts($contentTypes)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->accepts($contentTypes);\n }\n\n /**\n * Return the most suitable content type from the given array based on content negotiation.\n *\n * @param string|array $contentTypes\n * @return string|null\n * @static\n */\n public static function prefers($contentTypes)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->prefers($contentTypes);\n }\n\n /**\n * Determine if the current request accepts any content type.\n *\n * @return bool\n * @static\n */\n public static function acceptsAnyContentType()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsAnyContentType();\n }\n\n /**\n * Determines whether a request accepts JSON.\n *\n * @return bool\n * @static\n */\n public static function acceptsJson()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsJson();\n }\n\n /**\n * Determines whether a request accepts HTML.\n *\n * @return bool\n * @static\n */\n public static function acceptsHtml()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->acceptsHtml();\n }\n\n /**\n * Determine if the given content types match.\n *\n * @param string $actual\n * @param string $type\n * @return bool\n * @static\n */\n public static function matchesType($actual, $type)\n {\n return \\Illuminate\\Http\\Request::matchesType($actual, $type);\n }\n\n /**\n * Get the data format expected in the response.\n *\n * @param string $default\n * @return string\n * @static\n */\n public static function format($default = 'html')\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->format($default);\n }\n\n /**\n * Retrieve an old input item.\n *\n * @param string|null $key\n * @param \\Illuminate\\Database\\Eloquent\\Model|string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function old($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->old($key, $default);\n }\n\n /**\n * Flash the input for the current request to the session.\n *\n * @return void\n * @static\n */\n public static function flash()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flash();\n }\n\n /**\n * Flash only some of the input to the session.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function flashOnly($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flashOnly($keys);\n }\n\n /**\n * Flash only some of the input to the session.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function flashExcept($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flashExcept($keys);\n }\n\n /**\n * Flush all of the old input from the session.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n $instance->flush();\n }\n\n /**\n * Retrieve a server variable from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function server($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->server($key, $default);\n }\n\n /**\n * Determine if a header is set on the request.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasHeader($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasHeader($key);\n }\n\n /**\n * Retrieve a header from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function header($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->header($key, $default);\n }\n\n /**\n * Get the bearer token from the request headers.\n *\n * @return string|null\n * @static\n */\n public static function bearerToken()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->bearerToken();\n }\n\n /**\n * Get the keys for all of the input and files.\n *\n * @return array\n * @static\n */\n public static function keys()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->keys();\n }\n\n /**\n * Get all of the input and files for the request.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function all($keys = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->all($keys);\n }\n\n /**\n * Retrieve an input item from the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function input($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->input($key, $default);\n }\n\n /**\n * Retrieve input from the request as a Fluent object instance.\n *\n * @param array|string|null $key\n * @return \\Illuminate\\Support\\Fluent\n * @static\n */\n public static function fluent($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->fluent($key);\n }\n\n /**\n * Retrieve a query string item from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function query($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->query($key, $default);\n }\n\n /**\n * Retrieve a request payload item from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function post($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->post($key, $default);\n }\n\n /**\n * Determine if a cookie is set on the request.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasCookie($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasCookie($key);\n }\n\n /**\n * Retrieve a cookie from the request.\n *\n * @param string|null $key\n * @param string|array|null $default\n * @return string|array|null\n * @static\n */\n public static function cookie($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->cookie($key, $default);\n }\n\n /**\n * Get an array of all of the files on the request.\n *\n * @return array<string, \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]>\n * @static\n */\n public static function allFiles()\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->allFiles();\n }\n\n /**\n * Determine if the uploaded data contains a file.\n *\n * @param string $key\n * @return bool\n * @static\n */\n public static function hasFile($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasFile($key);\n }\n\n /**\n * Retrieve a file from the request.\n *\n * @param string|null $key\n * @param mixed $default\n * @return ($key is null ? array<string, \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]> : \\Illuminate\\Http\\UploadedFile|\\Illuminate\\Http\\UploadedFile[]|null)\n * @static\n */\n public static function file($key = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->file($key, $default);\n }\n\n /**\n * Dump the items.\n *\n * @param mixed $keys\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function dump($keys = [])\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->dump($keys);\n }\n\n /**\n * Dump the given arguments and terminate execution.\n *\n * @param mixed $args\n * @return never\n * @static\n */\n public static function dd(...$args)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->dd(...$args);\n }\n\n /**\n * Determine if the data contains a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function exists($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->exists($key);\n }\n\n /**\n * Determine if the data contains a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if the instance contains any of the given keys.\n *\n * @param string|array $keys\n * @return bool\n * @static\n */\n public static function hasAny($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->hasAny($keys);\n }\n\n /**\n * Apply the callback if the instance contains the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenHas($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenHas($key, $callback, $default);\n }\n\n /**\n * Determine if the instance contains a non-empty value for the given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function filled($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->filled($key);\n }\n\n /**\n * Determine if the instance contains an empty value for the given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function isNotFilled($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->isNotFilled($key);\n }\n\n /**\n * Determine if the instance contains a non-empty value for any of the given keys.\n *\n * @param string|array $keys\n * @return bool\n * @static\n */\n public static function anyFilled($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->anyFilled($keys);\n }\n\n /**\n * Apply the callback if the instance contains a non-empty value for the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenFilled($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenFilled($key, $callback, $default);\n }\n\n /**\n * Determine if the instance is missing a given key.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->missing($key);\n }\n\n /**\n * Apply the callback if the instance is missing the given key.\n *\n * @param string $key\n * @param callable $callback\n * @param callable|null $default\n * @return $this|mixed\n * @static\n */\n public static function whenMissing($key, $callback, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->whenMissing($key, $callback, $default);\n }\n\n /**\n * Retrieve data from the instance as a Stringable instance.\n *\n * @param string $key\n * @param mixed $default\n * @return \\Illuminate\\Support\\Stringable\n * @static\n */\n public static function str($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->str($key, $default);\n }\n\n /**\n * Retrieve data from the instance as a Stringable instance.\n *\n * @param string $key\n * @param mixed $default\n * @return \\Illuminate\\Support\\Stringable\n * @static\n */\n public static function string($key, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->string($key, $default);\n }\n\n /**\n * Retrieve data as a boolean value.\n * \n * Returns true when value is \"1\", \"true\", \"on\", and \"yes\". Otherwise, returns false.\n *\n * @param string|null $key\n * @param bool $default\n * @return bool\n * @static\n */\n public static function boolean($key = null, $default = false)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->boolean($key, $default);\n }\n\n /**\n * Retrieve data as an integer value.\n *\n * @param string $key\n * @param int $default\n * @return int\n * @static\n */\n public static function integer($key, $default = 0)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->integer($key, $default);\n }\n\n /**\n * Retrieve data as a float value.\n *\n * @param string $key\n * @param float $default\n * @return float\n * @static\n */\n public static function float($key, $default = 0.0)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->float($key, $default);\n }\n\n /**\n * Retrieve data from the instance as a Carbon instance.\n *\n * @param string $key\n * @param string|null $format\n * @param \\UnitEnum|string|null $tz\n * @return \\Illuminate\\Support\\Carbon|null\n * @throws \\Carbon\\Exceptions\\InvalidFormatException\n * @static\n */\n public static function date($key, $format = null, $tz = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->date($key, $format, $tz);\n }\n\n /**\n * Retrieve data from the instance as an enum.\n *\n * @template TEnum of \\BackedEnum\n * @param string $key\n * @param class-string<TEnum> $enumClass\n * @param TEnum|null $default\n * @return TEnum|null\n * @static\n */\n public static function enum($key, $enumClass, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->enum($key, $enumClass, $default);\n }\n\n /**\n * Retrieve data from the instance as an array of enums.\n *\n * @template TEnum of \\BackedEnum\n * @param string $key\n * @param class-string<TEnum> $enumClass\n * @return TEnum[]\n * @static\n */\n public static function enums($key, $enumClass)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->enums($key, $enumClass);\n }\n\n /**\n * Retrieve data from the instance as an array.\n *\n * @param array|string|null $key\n * @return array\n * @static\n */\n public static function array($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->array($key);\n }\n\n /**\n * Retrieve data from the instance as a collection.\n *\n * @param array|string|null $key\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function collect($key = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->collect($key);\n }\n\n /**\n * Get a subset containing the provided keys with values from the instance data.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->only($keys);\n }\n\n /**\n * Get all of the data except for a specified array of items.\n *\n * @param mixed $keys\n * @return array\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->except($keys);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Http\\Request $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Http\\Request::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Http\\Request::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Http\\Request::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Http\\Request::flushMacros();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validate($rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validate($rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param string $errorBag\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validateWithBag($errorBag, $rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validateWithBag($errorBag, $rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignature($absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignature($absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @static\n */\n public static function hasValidRelativeSignature()\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignature();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignatureWhileIgnoring($ignoreQuery, $absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @static\n */\n public static function hasValidRelativeSignatureWhileIgnoring($ignoreQuery = [])\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignatureWhileIgnoring($ignoreQuery);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\ResponseFactory\n */\n class Response {\n /**\n * Create a new response instance.\n *\n * @param mixed $content\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function make($content = '', $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->make($content, $status, $headers);\n }\n\n /**\n * Create a new \"no content\" response.\n *\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function noContent($status = 204, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->noContent($status, $headers);\n }\n\n /**\n * Create a new response for a given view.\n *\n * @param string|array $view\n * @param array $data\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\Response\n * @static\n */\n public static function view($view, $data = [], $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->view($view, $data, $status, $headers);\n }\n\n /**\n * Create a new JSON response instance.\n *\n * @param mixed $data\n * @param int $status\n * @param array $headers\n * @param int $options\n * @return \\Illuminate\\Http\\JsonResponse\n * @static\n */\n public static function json($data = [], $status = 200, $headers = [], $options = 0)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->json($data, $status, $headers, $options);\n }\n\n /**\n * Create a new JSONP response instance.\n *\n * @param string $callback\n * @param mixed $data\n * @param int $status\n * @param array $headers\n * @param int $options\n * @return \\Illuminate\\Http\\JsonResponse\n * @static\n */\n public static function jsonp($callback, $data = [], $status = 200, $headers = [], $options = 0)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->jsonp($callback, $data, $status, $headers, $options);\n }\n\n /**\n * Create a new event stream response.\n *\n * @param \\Closure $callback\n * @param array $headers\n * @param \\Illuminate\\Http\\StreamedEvent|string|null $endStreamWith\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function eventStream($callback, $headers = [], $endStreamWith = '</stream>')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->eventStream($callback, $headers, $endStreamWith);\n }\n\n /**\n * Create a new streamed response instance.\n *\n * @param callable|null $callback\n * @param int $status\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function stream($callback, $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->stream($callback, $status, $headers);\n }\n\n /**\n * Create a new streamed JSON response instance.\n *\n * @param array $data\n * @param int $status\n * @param array $headers\n * @param int $encodingOptions\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedJsonResponse\n * @static\n */\n public static function streamJson($data, $status = 200, $headers = [], $encodingOptions = 15)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->streamJson($data, $status, $headers, $encodingOptions);\n }\n\n /**\n * Create a new streamed response instance as a file download.\n *\n * @param callable $callback\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @throws \\Illuminate\\Routing\\Exceptions\\StreamedResponseException\n * @static\n */\n public static function streamDownload($callback, $name = null, $headers = [], $disposition = 'attachment')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->streamDownload($callback, $name, $headers, $disposition);\n }\n\n /**\n * Create a new file download response.\n *\n * @param \\SplFileInfo|string $file\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n * @static\n */\n public static function download($file, $name = null, $headers = [], $disposition = 'attachment')\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->download($file, $name, $headers, $disposition);\n }\n\n /**\n * Return the raw contents of a binary file.\n *\n * @param \\SplFileInfo|string $file\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n * @static\n */\n public static function file($file, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->file($file, $headers);\n }\n\n /**\n * Create a new redirect response to the given path.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectTo($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectTo($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to a named route.\n *\n * @param \\BackedEnum|string $route\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToRoute($route, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToRoute($route, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response to a controller action.\n *\n * @param array|string $action\n * @param mixed $parameters\n * @param int $status\n * @param array $headers\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToAction($action, $parameters = [], $status = 302, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToAction($action, $parameters, $status, $headers);\n }\n\n /**\n * Create a new redirect response, while putting the current URL in the session.\n *\n * @param string $path\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectGuest($path, $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectGuest($path, $status, $headers, $secure);\n }\n\n /**\n * Create a new redirect response to the previously intended location.\n *\n * @param string $default\n * @param int $status\n * @param array $headers\n * @param bool|null $secure\n * @return \\Illuminate\\Http\\RedirectResponse\n * @static\n */\n public static function redirectToIntended($default = '/', $status = 302, $headers = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\ResponseFactory $instance */\n return $instance->redirectToIntended($default, $status, $headers, $secure);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\ResponseFactory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\ResponseFactory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\ResponseFactory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\ResponseFactory::flushMacros();\n }\n\n /**\n * @see \\Jiminny\\Providers\\ResponseMacroServiceProvider::boot()\n * @param mixed $data\n * @param mixed $status\n * @param array $headers\n * @param mixed $options\n * @static\n */\n public static function twiml($data = null, $status = 200, $headers = [], $options = 0)\n {\n return \\Illuminate\\Routing\\ResponseFactory::twiml($data, $status, $headers, $options);\n }\n\n }\n /**\n * @method static \\Illuminate\\Routing\\RouteRegistrar attribute(string $key, mixed $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereAlpha(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereAlphaNumeric(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereNumber(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereUlid(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereUuid(array|string $parameters)\n * @method static \\Illuminate\\Routing\\RouteRegistrar whereIn(array|string $parameters, array $values)\n * @method static \\Illuminate\\Routing\\RouteRegistrar as(string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar can(\\UnitEnum|string $ability, array|string $models = [])\n * @method static \\Illuminate\\Routing\\RouteRegistrar controller(string $controller)\n * @method static \\Illuminate\\Routing\\RouteRegistrar domain(\\BackedEnum|string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar middleware(array|string|null $middleware)\n * @method static \\Illuminate\\Routing\\RouteRegistrar missing(\\Closure $missing)\n * @method static \\Illuminate\\Routing\\RouteRegistrar name(\\BackedEnum|string $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar namespace(string|null $value)\n * @method static \\Illuminate\\Routing\\RouteRegistrar prefix(string $prefix)\n * @method static \\Illuminate\\Routing\\RouteRegistrar scopeBindings()\n * @method static \\Illuminate\\Routing\\RouteRegistrar where(array $where)\n * @method static \\Illuminate\\Routing\\RouteRegistrar withoutMiddleware(array|string $middleware)\n * @method static \\Illuminate\\Routing\\RouteRegistrar withoutScopedBindings()\n * @see \\Illuminate\\Routing\\Router\n */\n class Route {\n /**\n * Register a new GET route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function get($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->get($uri, $action);\n }\n\n /**\n * Register a new POST route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function post($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->post($uri, $action);\n }\n\n /**\n * Register a new PUT route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function put($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->put($uri, $action);\n }\n\n /**\n * Register a new PATCH route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function patch($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->patch($uri, $action);\n }\n\n /**\n * Register a new DELETE route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function delete($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->delete($uri, $action);\n }\n\n /**\n * Register a new OPTIONS route with the router.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function options($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->options($uri, $action);\n }\n\n /**\n * Register a new route responding to all verbs.\n *\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function any($uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->any($uri, $action);\n }\n\n /**\n * Register a new fallback route with the router.\n *\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function fallback($action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->fallback($action);\n }\n\n /**\n * Create a redirect from one URI to another.\n *\n * @param string $uri\n * @param string $destination\n * @param int $status\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function redirect($uri, $destination, $status = 302)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->redirect($uri, $destination, $status);\n }\n\n /**\n * Create a permanent redirect from one URI to another.\n *\n * @param string $uri\n * @param string $destination\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function permanentRedirect($uri, $destination)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->permanentRedirect($uri, $destination);\n }\n\n /**\n * Register a new route that returns a view.\n *\n * @param string $uri\n * @param string $view\n * @param array $data\n * @param int|array $status\n * @param array $headers\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function view($uri, $view, $data = [], $status = 200, $headers = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->view($uri, $view, $data, $status, $headers);\n }\n\n /**\n * Register a new route with the given verbs.\n *\n * @param array|string $methods\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function match($methods, $uri, $action = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->match($methods, $uri, $action);\n }\n\n /**\n * Register an array of resource controllers.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function resources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->resources($resources, $options);\n }\n\n /**\n * Register an array of resource controllers that can be soft deleted.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function softDeletableResources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->softDeletableResources($resources, $options);\n }\n\n /**\n * Route a resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingResourceRegistration\n * @static\n */\n public static function resource($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resource($name, $controller, $options);\n }\n\n /**\n * Register an array of API resource controllers.\n *\n * @param array $resources\n * @param array $options\n * @return void\n * @static\n */\n public static function apiResources($resources, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->apiResources($resources, $options);\n }\n\n /**\n * Route an API resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingResourceRegistration\n * @static\n */\n public static function apiResource($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->apiResource($name, $controller, $options);\n }\n\n /**\n * Register an array of singleton resource controllers.\n *\n * @param array $singletons\n * @param array $options\n * @return void\n * @static\n */\n public static function singletons($singletons, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->singletons($singletons, $options);\n }\n\n /**\n * Route a singleton resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingSingletonResourceRegistration\n * @static\n */\n public static function singleton($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->singleton($name, $controller, $options);\n }\n\n /**\n * Register an array of API singleton resource controllers.\n *\n * @param array $singletons\n * @param array $options\n * @return void\n * @static\n */\n public static function apiSingletons($singletons, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->apiSingletons($singletons, $options);\n }\n\n /**\n * Route an API singleton resource to a controller.\n *\n * @param string $name\n * @param string $controller\n * @param array $options\n * @return \\Illuminate\\Routing\\PendingSingletonResourceRegistration\n * @static\n */\n public static function apiSingleton($name, $controller, $options = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->apiSingleton($name, $controller, $options);\n }\n\n /**\n * Create a route group with shared attributes.\n *\n * @param array $attributes\n * @param \\Closure|array|string $routes\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function group($attributes, $routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->group($attributes, $routes);\n }\n\n /**\n * Merge the given array with the last group stack.\n *\n * @param array $new\n * @param bool $prependExistingPrefix\n * @return array\n * @static\n */\n public static function mergeWithLastGroup($new, $prependExistingPrefix = true)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->mergeWithLastGroup($new, $prependExistingPrefix);\n }\n\n /**\n * Get the prefix from the last group on the stack.\n *\n * @return string\n * @static\n */\n public static function getLastGroupPrefix()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getLastGroupPrefix();\n }\n\n /**\n * Add a route to the underlying route collection.\n *\n * @param array|string $methods\n * @param string $uri\n * @param array|string|callable|null $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function addRoute($methods, $uri, $action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->addRoute($methods, $uri, $action);\n }\n\n /**\n * Create a new Route object.\n *\n * @param array|string $methods\n * @param string $uri\n * @param mixed $action\n * @return \\Illuminate\\Routing\\Route\n * @static\n */\n public static function newRoute($methods, $uri, $action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->newRoute($methods, $uri, $action);\n }\n\n /**\n * Return the response returned by the given route.\n *\n * @param string $name\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function respondWithRoute($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->respondWithRoute($name);\n }\n\n /**\n * Dispatch the request to the application.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function dispatch($request)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->dispatch($request);\n }\n\n /**\n * Dispatch the request to a route and return the response.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function dispatchToRoute($request)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->dispatchToRoute($request);\n }\n\n /**\n * Gather the middleware for the given route with resolved class names.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return array\n * @static\n */\n public static function gatherRouteMiddleware($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->gatherRouteMiddleware($route);\n }\n\n /**\n * Resolve a flat array of middleware classes from the provided array.\n *\n * @param array $middleware\n * @param array $excluded\n * @return array\n * @static\n */\n public static function resolveMiddleware($middleware, $excluded = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resolveMiddleware($middleware, $excluded);\n }\n\n /**\n * Create a response instance from the given value.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param mixed $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function prepareResponse($request, $response)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->prepareResponse($request, $response);\n }\n\n /**\n * Static version of prepareResponse.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param mixed $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function toResponse($request, $response)\n {\n return \\Illuminate\\Routing\\Router::toResponse($request, $response);\n }\n\n /**\n * Substitute the route bindings onto the route.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return \\Illuminate\\Routing\\Route\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<\\Illuminate\\Database\\Eloquent\\Model>\n * @throws \\Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException\n * @static\n */\n public static function substituteBindings($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->substituteBindings($route);\n }\n\n /**\n * Substitute the implicit route bindings for the given route.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @return void\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<\\Illuminate\\Database\\Eloquent\\Model>\n * @throws \\Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException\n * @static\n */\n public static function substituteImplicitBindings($route)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->substituteImplicitBindings($route);\n }\n\n /**\n * Register a callback to run after implicit bindings are substituted.\n *\n * @param callable $callback\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function substituteImplicitBindingsUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->substituteImplicitBindingsUsing($callback);\n }\n\n /**\n * Register a route matched event listener.\n *\n * @param string|callable $callback\n * @return void\n * @static\n */\n public static function matched($callback)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->matched($callback);\n }\n\n /**\n * Get all of the defined middleware short-hand names.\n *\n * @return array\n * @static\n */\n public static function getMiddleware()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getMiddleware();\n }\n\n /**\n * Register a short-hand name for a middleware.\n *\n * @param string $name\n * @param string $class\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function aliasMiddleware($name, $class)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->aliasMiddleware($name, $class);\n }\n\n /**\n * Check if a middlewareGroup with the given name exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMiddlewareGroup($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->hasMiddlewareGroup($name);\n }\n\n /**\n * Get all of the defined middleware groups.\n *\n * @return array\n * @static\n */\n public static function getMiddlewareGroups()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getMiddlewareGroups();\n }\n\n /**\n * Register a group of middleware.\n *\n * @param string $name\n * @param array $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function middlewareGroup($name, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->middlewareGroup($name, $middleware);\n }\n\n /**\n * Add a middleware to the beginning of a middleware group.\n * \n * If the middleware is already in the group, it will not be added again.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function prependMiddlewareToGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->prependMiddlewareToGroup($group, $middleware);\n }\n\n /**\n * Add a middleware to the end of a middleware group.\n * \n * If the middleware is already in the group, it will not be added again.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function pushMiddlewareToGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->pushMiddlewareToGroup($group, $middleware);\n }\n\n /**\n * Remove the given middleware from the specified group.\n *\n * @param string $group\n * @param string $middleware\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function removeMiddlewareFromGroup($group, $middleware)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->removeMiddlewareFromGroup($group, $middleware);\n }\n\n /**\n * Flush the router's middleware groups.\n *\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function flushMiddlewareGroups()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->flushMiddlewareGroups();\n }\n\n /**\n * Add a new route parameter binder.\n *\n * @param string $key\n * @param string|callable $binder\n * @return void\n * @static\n */\n public static function bind($key, $binder)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->bind($key, $binder);\n }\n\n /**\n * Register a model binder for a wildcard.\n *\n * @param string $key\n * @param string $class\n * @param \\Closure|null $callback\n * @return void\n * @static\n */\n public static function model($key, $class, $callback = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->model($key, $class, $callback);\n }\n\n /**\n * Get the binding callback for a given binding.\n *\n * @param string $key\n * @return \\Closure|null\n * @static\n */\n public static function getBindingCallback($key)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getBindingCallback($key);\n }\n\n /**\n * Get the global \"where\" patterns.\n *\n * @return array\n * @static\n */\n public static function getPatterns()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getPatterns();\n }\n\n /**\n * Set a global where pattern on all routes.\n *\n * @param string $key\n * @param string $pattern\n * @return void\n * @static\n */\n public static function pattern($key, $pattern)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->pattern($key, $pattern);\n }\n\n /**\n * Set a group of global where patterns on all routes.\n *\n * @param array $patterns\n * @return void\n * @static\n */\n public static function patterns($patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->patterns($patterns);\n }\n\n /**\n * Determine if the router currently has a group stack.\n *\n * @return bool\n * @static\n */\n public static function hasGroupStack()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->hasGroupStack();\n }\n\n /**\n * Get the current group stack for the router.\n *\n * @return array\n * @static\n */\n public static function getGroupStack()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getGroupStack();\n }\n\n /**\n * Get a route parameter for the current route.\n *\n * @param string $key\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function input($key, $default = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->input($key, $default);\n }\n\n /**\n * Get the request currently being dispatched.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function getCurrentRequest()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getCurrentRequest();\n }\n\n /**\n * Get the currently dispatched route instance.\n *\n * @return \\Illuminate\\Routing\\Route|null\n * @static\n */\n public static function getCurrentRoute()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getCurrentRoute();\n }\n\n /**\n * Get the currently dispatched route instance.\n *\n * @return \\Illuminate\\Routing\\Route|null\n * @static\n */\n public static function current()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->current();\n }\n\n /**\n * Check if a route with the given name exists.\n *\n * @param string|array $name\n * @return bool\n * @static\n */\n public static function has($name)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->has($name);\n }\n\n /**\n * Get the current route name.\n *\n * @return string|null\n * @static\n */\n public static function currentRouteName()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteName();\n }\n\n /**\n * Alias for the \"currentRouteNamed\" method.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function is(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->is(...$patterns);\n }\n\n /**\n * Determine if the current route matches a pattern.\n *\n * @param mixed $patterns\n * @return bool\n * @static\n */\n public static function currentRouteNamed(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteNamed(...$patterns);\n }\n\n /**\n * Get the current route action.\n *\n * @return string|null\n * @static\n */\n public static function currentRouteAction()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteAction();\n }\n\n /**\n * Alias for the \"currentRouteUses\" method.\n *\n * @param array|string $patterns\n * @return bool\n * @static\n */\n public static function uses(...$patterns)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->uses(...$patterns);\n }\n\n /**\n * Determine if the current route action matches a given action.\n *\n * @param string $action\n * @return bool\n * @static\n */\n public static function currentRouteUses($action)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->currentRouteUses($action);\n }\n\n /**\n * Set the unmapped global resource parameters to singular.\n *\n * @param bool $singular\n * @return void\n * @static\n */\n public static function singularResourceParameters($singular = true)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->singularResourceParameters($singular);\n }\n\n /**\n * Set the global resource parameter mapping.\n *\n * @param array $parameters\n * @return void\n * @static\n */\n public static function resourceParameters($parameters = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->resourceParameters($parameters);\n }\n\n /**\n * Get or set the verbs used in the resource URIs.\n *\n * @param array $verbs\n * @return array|null\n * @static\n */\n public static function resourceVerbs($verbs = [])\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->resourceVerbs($verbs);\n }\n\n /**\n * Get the underlying route collection.\n *\n * @return \\Illuminate\\Routing\\RouteCollectionInterface\n * @static\n */\n public static function getRoutes()\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->getRoutes();\n }\n\n /**\n * Set the route collection instance.\n *\n * @param \\Illuminate\\Routing\\RouteCollection $routes\n * @return void\n * @static\n */\n public static function setRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->setRoutes($routes);\n }\n\n /**\n * Set the compiled route collection instance.\n *\n * @param array $routes\n * @return void\n * @static\n */\n public static function setCompiledRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n $instance->setCompiledRoutes($routes);\n }\n\n /**\n * Remove any duplicate middleware from the given array.\n *\n * @param array $middleware\n * @return array\n * @static\n */\n public static function uniqueMiddleware($middleware)\n {\n return \\Illuminate\\Routing\\Router::uniqueMiddleware($middleware);\n }\n\n /**\n * Set the container instance used by the router.\n *\n * @param \\Illuminate\\Container\\Container $container\n * @return \\Illuminate\\Routing\\Router\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\Router::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\Router::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\Router::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\Router::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n /**\n * Call the given Closure with this instance then return the instance.\n *\n * @param (callable($this): mixed)|null $callback\n * @return ($callback is null ? \\Illuminate\\Support\\HigherOrderTapProxy : $this)\n * @static\n */\n public static function tap($callback = null)\n {\n /** @var \\Illuminate\\Routing\\Router $instance */\n return $instance->tap($callback);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::auth()\n * @param mixed $options\n * @static\n */\n public static function auth($options = [])\n {\n return \\Illuminate\\Routing\\Router::auth($options);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::resetPassword()\n * @static\n */\n public static function resetPassword()\n {\n return \\Illuminate\\Routing\\Router::resetPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::confirmPassword()\n * @static\n */\n public static function confirmPassword()\n {\n return \\Illuminate\\Routing\\Router::confirmPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::emailVerification()\n * @static\n */\n public static function emailVerification()\n {\n return \\Illuminate\\Routing\\Router::emailVerification();\n }\n\n }\n /**\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes withoutOverlapping(int $expiresAt = 1440)\n * @method static void mergeAttributes(\\Illuminate\\Console\\Scheduling\\Event $event)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes user(string $user)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes environments(mixed $environments)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes evenInMaintenanceMode()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes onOneServer()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes runInBackground()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes when(\\Closure|bool $callback)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes skip(\\Closure|bool $callback)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes name(string $description)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes description(string $description)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes cron(string $expression)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes between(string $startTime, string $endTime)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes unlessBetween(string $startTime, string $endTime)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everySecond()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFiveSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTenSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFifteenSeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwentySeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThirtySeconds()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyMinute()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThreeMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFourMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFiveMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTenMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFifteenMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThirtyMinutes()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes hourly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes hourlyAt(array|string|int|int[] $offset)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyOddHour(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyTwoHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyThreeHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everyFourHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes everySixHours(array|string|int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes daily()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes at(string $time)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes dailyAt(string $time)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceDaily(int $first = 1, int $second = 13)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceDailyAt(int $first = 1, int $second = 13, int $offset = 0)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekends()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes mondays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes tuesdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes wednesdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes thursdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes fridays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes saturdays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes sundays()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weekly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes weeklyOn(mixed $dayOfWeek, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes monthly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes monthlyOn(int $dayOfMonth = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes twiceMonthly(int $first = 1, int $second = 16, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes lastDayOfMonth(string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes quarterly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes quarterlyOn(int $dayOfQuarter = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes yearly()\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes yearlyOn(int $month = 1, int|string $dayOfMonth = 1, string $time = '0:0')\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes days(mixed $days)\n * @method static \\Illuminate\\Console\\Scheduling\\PendingEventAttributes timezone(\\UnitEnum|\\DateTimeZone|string $timezone)\n * @see \\Illuminate\\Console\\Scheduling\\Schedule\n */\n class Schedule {\n /**\n * Add a new callback event to the schedule.\n *\n * @param string|callable $callback\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\CallbackEvent\n * @static\n */\n public static function call($callback, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->call($callback, $parameters);\n }\n\n /**\n * Add a new Artisan command event to the schedule.\n *\n * @param \\Symfony\\Component\\Console\\Command\\Command|string $command\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\Event\n * @static\n */\n public static function command($command, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->command($command, $parameters);\n }\n\n /**\n * Add a new job callback event to the schedule.\n *\n * @param object|string $job\n * @param \\UnitEnum|string|null $queue\n * @param \\UnitEnum|string|null $connection\n * @return \\Illuminate\\Console\\Scheduling\\CallbackEvent\n * @static\n */\n public static function job($job, $queue = null, $connection = null)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->job($job, $queue, $connection);\n }\n\n /**\n * Add a new command event to the schedule.\n *\n * @param string $command\n * @param array $parameters\n * @return \\Illuminate\\Console\\Scheduling\\Event\n * @static\n */\n public static function exec($command, $parameters = [])\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->exec($command, $parameters);\n }\n\n /**\n * Create new schedule group.\n *\n * @param \\Illuminate\\Console\\Scheduling\\Event $event\n * @return void\n * @throws \\RuntimeException\n * @static\n */\n public static function group($events)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n $instance->group($events);\n }\n\n /**\n * Compile array input for a command.\n *\n * @param string|int $key\n * @param array $value\n * @return string\n * @static\n */\n public static function compileArrayInput($key, $value)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->compileArrayInput($key, $value);\n }\n\n /**\n * Determine if the server is allowed to run this event.\n *\n * @param \\Illuminate\\Console\\Scheduling\\Event $event\n * @param \\DateTimeInterface $time\n * @return bool\n * @static\n */\n public static function serverShouldRun($event, $time)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->serverShouldRun($event, $time);\n }\n\n /**\n * Get all of the events on the schedule that are due.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function dueEvents($app)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->dueEvents($app);\n }\n\n /**\n * Get all of the events on the schedule.\n *\n * @return \\Illuminate\\Console\\Scheduling\\Event[]\n * @static\n */\n public static function events()\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->events();\n }\n\n /**\n * Specify the cache store that should be used to store mutexes.\n *\n * @param string $store\n * @return \\Illuminate\\Console\\Scheduling\\Schedule\n * @static\n */\n public static function useCache($store)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->useCache($store);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Console\\Scheduling\\Schedule::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Console\\Scheduling\\Schedule::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Console\\Scheduling\\Schedule $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Database\\Schema\\Builder\n */\n class Schema {\n /**\n * Drop all tables from the database.\n *\n * @return void\n * @static\n */\n public static function dropAllTables()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllTables();\n }\n\n /**\n * Drop all views from the database.\n *\n * @return void\n * @static\n */\n public static function dropAllViews()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllViews();\n }\n\n /**\n * Get the names of current schemas for the connection.\n *\n * @return string[]|null\n * @static\n */\n public static function getCurrentSchemaListing()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\MySqlBuilder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getCurrentSchemaListing();\n }\n\n /**\n * Set the default string length for migrations.\n *\n * @param int $length\n * @return void\n * @static\n */\n public static function defaultStringLength($length)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultStringLength($length);\n }\n\n /**\n * Set the default time precision for migrations.\n *\n * @static\n */\n public static function defaultTimePrecision($precision)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n return \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultTimePrecision($precision);\n }\n\n /**\n * Set the default morph key type for migrations.\n *\n * @param string $type\n * @return void\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function defaultMorphKeyType($type)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::defaultMorphKeyType($type);\n }\n\n /**\n * Set the default morph key type for migrations to UUIDs.\n *\n * @return void\n * @static\n */\n public static function morphUsingUuids()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::morphUsingUuids();\n }\n\n /**\n * Set the default morph key type for migrations to ULIDs.\n *\n * @return void\n * @static\n */\n public static function morphUsingUlids()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::morphUsingUlids();\n }\n\n /**\n * Create a database in the schema.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function createDatabase($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->createDatabase($name);\n }\n\n /**\n * Drop a database from the schema if the database exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function dropDatabaseIfExists($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->dropDatabaseIfExists($name);\n }\n\n /**\n * Get the schemas that belong to the connection.\n *\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, path: string|null, default: bool}>\n * @static\n */\n public static function getSchemas()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getSchemas();\n }\n\n /**\n * Determine if the given table exists.\n *\n * @param string $table\n * @return bool\n * @static\n */\n public static function hasTable($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasTable($table);\n }\n\n /**\n * Determine if the given view exists.\n *\n * @param string $view\n * @return bool\n * @static\n */\n public static function hasView($view)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasView($view);\n }\n\n /**\n * Get the tables that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string|null, schema_qualified_name: string, size: int|null, comment: string|null, collation: string|null, engine: string|null}>\n * @static\n */\n public static function getTables($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTables($schema);\n }\n\n /**\n * Get the names of the tables that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @param bool $schemaQualified\n * @return list<string>\n * @static\n */\n public static function getTableListing($schema = null, $schemaQualified = true)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTableListing($schema, $schemaQualified);\n }\n\n /**\n * Get the views that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string|null, schema_qualified_name: string, definition: string}>\n * @static\n */\n public static function getViews($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getViews($schema);\n }\n\n /**\n * Get the user-defined types that belong to the connection.\n *\n * @param string|string[]|null $schema\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, schema: string, type: string, type: string, category: string, implicit: bool}>\n * @static\n */\n public static function getTypes($schema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getTypes($schema);\n }\n\n /**\n * Determine if the given table has a given column.\n *\n * @param string $table\n * @param string $column\n * @return bool\n * @static\n */\n public static function hasColumn($table, $column)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasColumn($table, $column);\n }\n\n /**\n * Determine if the given table has given columns.\n *\n * @param string $table\n * @param array<string> $columns\n * @return bool\n * @static\n */\n public static function hasColumns($table, $columns)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasColumns($table, $columns);\n }\n\n /**\n * Execute a table builder callback if the given table has a given column.\n *\n * @param string $table\n * @param string $column\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function whenTableHasColumn($table, $column, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->whenTableHasColumn($table, $column, $callback);\n }\n\n /**\n * Execute a table builder callback if the given table doesn't have a given column.\n *\n * @param string $table\n * @param string $column\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function whenTableDoesntHaveColumn($table, $column, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->whenTableDoesntHaveColumn($table, $column, $callback);\n }\n\n /**\n * Get the data type for the given column name.\n *\n * @param string $table\n * @param string $column\n * @param bool $fullDefinition\n * @return string\n * @static\n */\n public static function getColumnType($table, $column, $fullDefinition = false)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumnType($table, $column, $fullDefinition);\n }\n\n /**\n * Get the column listing for a given table.\n *\n * @param string $table\n * @return list<string>\n * @static\n */\n public static function getColumnListing($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumnListing($table);\n }\n\n /**\n * Get the columns for a given table.\n *\n * @param string $table\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, type: string, type_name: string, nullable: bool, default: mixed, auto_increment: bool, comment: string|null, generation: array{type: string, expression: string|null}|null}>\n * @static\n */\n public static function getColumns($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getColumns($table);\n }\n\n /**\n * Get the indexes for a given table.\n *\n * @param string $table\n * @return \\Illuminate\\Database\\Schema\\list<array{name: string, columns: list<string>, type: string, unique: bool, primary: bool}>\n * @static\n */\n public static function getIndexes($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getIndexes($table);\n }\n\n /**\n * Get the names of the indexes for a given table.\n *\n * @param string $table\n * @return list<string>\n * @static\n */\n public static function getIndexListing($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getIndexListing($table);\n }\n\n /**\n * Determine if the given table has a given index.\n *\n * @param string $table\n * @param string|array $index\n * @param string|null $type\n * @return bool\n * @static\n */\n public static function hasIndex($table, $index, $type = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->hasIndex($table, $index, $type);\n }\n\n /**\n * Get the foreign keys for a given table.\n *\n * @param string $table\n * @return array\n * @static\n */\n public static function getForeignKeys($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getForeignKeys($table);\n }\n\n /**\n * Modify a table on the schema.\n *\n * @param string $table\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function table($table, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->table($table, $callback);\n }\n\n /**\n * Create a new table on the schema.\n *\n * @param string $table\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function create($table, $callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->create($table, $callback);\n }\n\n /**\n * Drop a table from the schema.\n *\n * @param string $table\n * @return void\n * @static\n */\n public static function drop($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->drop($table);\n }\n\n /**\n * Drop a table from the schema if it exists.\n *\n * @param string $table\n * @return void\n * @static\n */\n public static function dropIfExists($table)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropIfExists($table);\n }\n\n /**\n * Drop columns from a table schema.\n *\n * @param string $table\n * @param string|array<string> $columns\n * @return void\n * @static\n */\n public static function dropColumns($table, $columns)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropColumns($table, $columns);\n }\n\n /**\n * Drop all types from the database.\n *\n * @return void\n * @throws \\LogicException\n * @static\n */\n public static function dropAllTypes()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->dropAllTypes();\n }\n\n /**\n * Rename a table on the schema.\n *\n * @param string $from\n * @param string $to\n * @return void\n * @static\n */\n public static function rename($from, $to)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->rename($from, $to);\n }\n\n /**\n * Enable foreign key constraints.\n *\n * @return bool\n * @static\n */\n public static function enableForeignKeyConstraints()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->enableForeignKeyConstraints();\n }\n\n /**\n * Disable foreign key constraints.\n *\n * @return bool\n * @static\n */\n public static function disableForeignKeyConstraints()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->disableForeignKeyConstraints();\n }\n\n /**\n * Disable foreign key constraints during the execution of a callback.\n *\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function withoutForeignKeyConstraints($callback)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->withoutForeignKeyConstraints($callback);\n }\n\n /**\n * Get the default schema name for the connection.\n *\n * @return string|null\n * @static\n */\n public static function getCurrentSchemaName()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getCurrentSchemaName();\n }\n\n /**\n * Parse the given database object reference and extract the schema and table.\n *\n * @param string $reference\n * @param string|bool|null $withDefaultSchema\n * @return array\n * @static\n */\n public static function parseSchemaAndTable($reference, $withDefaultSchema = null)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->parseSchemaAndTable($reference, $withDefaultSchema);\n }\n\n /**\n * Get the database connection instance.\n *\n * @return \\Illuminate\\Database\\Connection\n * @static\n */\n public static function getConnection()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n return $instance->getConnection();\n }\n\n /**\n * Set the Schema Blueprint resolver callback.\n *\n * @param \\Closure(\\Illuminate\\Database\\Connection, string, \\Closure|null): \\Illuminate\\Database\\Schema\\Blueprint $resolver\n * @return void\n * @static\n */\n public static function blueprintResolver($resolver)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n /** @var \\Illuminate\\Database\\Schema\\MariaDbBuilder $instance */\n $instance->blueprintResolver($resolver);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n return \\Illuminate\\Database\\Schema\\MariaDbBuilder::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n //Method inherited from \\Illuminate\\Database\\Schema\\Builder \n \\Illuminate\\Database\\Schema\\MariaDbBuilder::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Session\\SessionManager\n */\n class Session {\n /**\n * Determine if requests for the same session should wait for each to finish before executing.\n *\n * @return bool\n * @static\n */\n public static function shouldBlock()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->shouldBlock();\n }\n\n /**\n * Get the name of the cache store / driver that should be used to acquire session locks.\n *\n * @return string|null\n * @static\n */\n public static function blockDriver()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->blockDriver();\n }\n\n /**\n * Get the maximum number of seconds the session lock should be held for.\n *\n * @return int\n * @static\n */\n public static function defaultRouteBlockLockSeconds()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->defaultRouteBlockLockSeconds();\n }\n\n /**\n * Get the maximum number of seconds to wait while attempting to acquire a route block session lock.\n *\n * @return int\n * @static\n */\n public static function defaultRouteBlockWaitSeconds()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->defaultRouteBlockWaitSeconds();\n }\n\n /**\n * Get the session configuration.\n *\n * @return array\n * @static\n */\n public static function getSessionConfig()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getSessionConfig();\n }\n\n /**\n * Get the default session driver name.\n *\n * @return string|null\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Set the default session driver name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultDriver($name)\n {\n /** @var \\Illuminate\\Session\\SessionManager $instance */\n $instance->setDefaultDriver($name);\n }\n\n /**\n * Get a driver instance.\n *\n * @param string|null $driver\n * @return mixed\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function driver($driver = null)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->driver($driver);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Get all of the created \"drivers\".\n *\n * @return array\n * @static\n */\n public static function getDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getDrivers();\n }\n\n /**\n * Get the container instance used by the manager.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function setContainer($container)\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * Forget all of the resolved driver instances.\n *\n * @return \\Illuminate\\Session\\SessionManager\n * @static\n */\n public static function forgetDrivers()\n {\n //Method inherited from \\Illuminate\\Support\\Manager \n /** @var \\Illuminate\\Session\\SessionManager $instance */\n return $instance->forgetDrivers();\n }\n\n /**\n * Start the session, reading the data from a handler.\n *\n * @return bool\n * @static\n */\n public static function start()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->start();\n }\n\n /**\n * Save the session data to storage.\n *\n * @return void\n * @static\n */\n public static function save()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->save();\n }\n\n /**\n * Age the flash data for the session.\n *\n * @return void\n * @static\n */\n public static function ageFlashData()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->ageFlashData();\n }\n\n /**\n * Get all of the session data.\n *\n * @return array\n * @static\n */\n public static function all()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->all();\n }\n\n /**\n * Get a subset of the session data.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function only($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->only($keys);\n }\n\n /**\n * Get all the session data except for a specified array of items.\n *\n * @param array $keys\n * @return array\n * @static\n */\n public static function except($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->except($keys);\n }\n\n /**\n * Checks if a key exists.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function exists($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->exists($key);\n }\n\n /**\n * Determine if the given key is missing from the session data.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function missing($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->missing($key);\n }\n\n /**\n * Determine if a key is present and not null.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function has($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->has($key);\n }\n\n /**\n * Determine if any of the given keys are present and not null.\n *\n * @param string|array $key\n * @return bool\n * @static\n */\n public static function hasAny($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasAny($key);\n }\n\n /**\n * Get an item from the session.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function get($key, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->get($key, $default);\n }\n\n /**\n * Get the value of a given key and then forget it.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function pull($key, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->pull($key, $default);\n }\n\n /**\n * Determine if the session contains old input.\n *\n * @param string|null $key\n * @return bool\n * @static\n */\n public static function hasOldInput($key = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasOldInput($key);\n }\n\n /**\n * Get the requested item from the flashed input array.\n *\n * @param string|null $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getOldInput($key = null, $default = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getOldInput($key, $default);\n }\n\n /**\n * Replace the given session attributes entirely.\n *\n * @param array $attributes\n * @return void\n * @static\n */\n public static function replace($attributes)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->replace($attributes);\n }\n\n /**\n * Put a key / value pair or array of key / value pairs in the session.\n *\n * @param string|array $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function put($key, $value = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->put($key, $value);\n }\n\n /**\n * Get an item from the session, or store the default value.\n *\n * @param string $key\n * @param \\Closure $callback\n * @return mixed\n * @static\n */\n public static function remember($key, $callback)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->remember($key, $callback);\n }\n\n /**\n * Push a value onto a session array.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function push($key, $value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->push($key, $value);\n }\n\n /**\n * Increment the value of an item in the session.\n *\n * @param string $key\n * @param int $amount\n * @return mixed\n * @static\n */\n public static function increment($key, $amount = 1)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->increment($key, $amount);\n }\n\n /**\n * Decrement the value of an item in the session.\n *\n * @param string $key\n * @param int $amount\n * @return int\n * @static\n */\n public static function decrement($key, $amount = 1)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->decrement($key, $amount);\n }\n\n /**\n * Flash a key / value pair to the session.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function flash($key, $value = true)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flash($key, $value);\n }\n\n /**\n * Flash a key / value pair to the session for immediate use.\n *\n * @param string $key\n * @param mixed $value\n * @return void\n * @static\n */\n public static function now($key, $value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->now($key, $value);\n }\n\n /**\n * Reflash all of the session flash data.\n *\n * @return void\n * @static\n */\n public static function reflash()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->reflash();\n }\n\n /**\n * Reflash a subset of the current flash data.\n *\n * @param mixed $keys\n * @return void\n * @static\n */\n public static function keep($keys = null)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->keep($keys);\n }\n\n /**\n * Flash an input array to the session.\n *\n * @param array $value\n * @return void\n * @static\n */\n public static function flashInput($value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flashInput($value);\n }\n\n /**\n * Get the session cache instance.\n *\n * @return \\Illuminate\\Contracts\\Cache\\Repository\n * @static\n */\n public static function cache()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->cache();\n }\n\n /**\n * Remove an item from the session, returning its value.\n *\n * @param string $key\n * @return mixed\n * @static\n */\n public static function remove($key)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->remove($key);\n }\n\n /**\n * Remove one or many items from the session.\n *\n * @param string|array $keys\n * @return void\n * @static\n */\n public static function forget($keys)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->forget($keys);\n }\n\n /**\n * Remove all of the items from the session.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->flush();\n }\n\n /**\n * Flush the session data and regenerate the ID.\n *\n * @return bool\n * @static\n */\n public static function invalidate()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->invalidate();\n }\n\n /**\n * Generate a new session identifier.\n *\n * @param bool $destroy\n * @return bool\n * @static\n */\n public static function regenerate($destroy = false)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->regenerate($destroy);\n }\n\n /**\n * Generate a new session ID for the session.\n *\n * @param bool $destroy\n * @return bool\n * @static\n */\n public static function migrate($destroy = false)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->migrate($destroy);\n }\n\n /**\n * Determine if the session has been started.\n *\n * @return bool\n * @static\n */\n public static function isStarted()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->isStarted();\n }\n\n /**\n * Get the name of the session.\n *\n * @return string\n * @static\n */\n public static function getName()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getName();\n }\n\n /**\n * Set the name of the session.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setName($name)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setName($name);\n }\n\n /**\n * Get the current session ID.\n *\n * @return string\n * @static\n */\n public static function id()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->id();\n }\n\n /**\n * Get the current session ID.\n *\n * @return string\n * @static\n */\n public static function getId()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getId();\n }\n\n /**\n * Set the session ID.\n *\n * @param string|null $id\n * @return void\n * @static\n */\n public static function setId($id)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setId($id);\n }\n\n /**\n * Determine if this is a valid session ID.\n *\n * @param string|null $id\n * @return bool\n * @static\n */\n public static function isValidId($id)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->isValidId($id);\n }\n\n /**\n * Set the existence of the session on the handler if applicable.\n *\n * @param bool $value\n * @return void\n * @static\n */\n public static function setExists($value)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setExists($value);\n }\n\n /**\n * Get the CSRF token value.\n *\n * @return string\n * @static\n */\n public static function token()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->token();\n }\n\n /**\n * Regenerate the CSRF token value.\n *\n * @return void\n * @static\n */\n public static function regenerateToken()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->regenerateToken();\n }\n\n /**\n * Determine if the previous URI is available.\n *\n * @return bool\n * @static\n */\n public static function hasPreviousUri()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->hasPreviousUri();\n }\n\n /**\n * Get the previous URL from the session as a URI instance.\n *\n * @return \\Illuminate\\Support\\Uri\n * @throws \\RuntimeException\n * @static\n */\n public static function previousUri()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->previousUri();\n }\n\n /**\n * Get the previous URL from the session.\n *\n * @return string|null\n * @static\n */\n public static function previousUrl()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->previousUrl();\n }\n\n /**\n * Set the \"previous\" URL in the session.\n *\n * @param string $url\n * @return void\n * @static\n */\n public static function setPreviousUrl($url)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setPreviousUrl($url);\n }\n\n /**\n * Specify that the user has confirmed their password.\n *\n * @return void\n * @static\n */\n public static function passwordConfirmed()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->passwordConfirmed();\n }\n\n /**\n * Get the underlying session handler implementation.\n *\n * @return \\SessionHandlerInterface\n * @static\n */\n public static function getHandler()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->getHandler();\n }\n\n /**\n * Set the underlying session handler implementation.\n *\n * @param \\SessionHandlerInterface $handler\n * @return \\SessionHandlerInterface\n * @static\n */\n public static function setHandler($handler)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->setHandler($handler);\n }\n\n /**\n * Determine if the session handler needs a request.\n *\n * @return bool\n * @static\n */\n public static function handlerNeedsRequest()\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n return $instance->handlerNeedsRequest();\n }\n\n /**\n * Set the request on the handler instance.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function setRequestOnHandler($request)\n {\n /** @var \\Illuminate\\Session\\Store $instance */\n $instance->setRequestOnHandler($request);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Session\\Store::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Session\\Store::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Session\\Store::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Session\\Store::flushMacros();\n }\n\n }\n /**\n * @method static bool has(string $location)\n * @method static string read(string $location)\n * @method static \\League\\Flysystem\\DirectoryListing listContents(string $location, bool $deep = false)\n * @method static int fileSize(string $path)\n * @method static string visibility(string $path)\n * @method static void write(string $location, string $contents, array $config = [])\n * @method static void createDirectory(string $location, array $config = [])\n * @see \\Illuminate\\Filesystem\\FilesystemManager\n */\n class Storage {\n /**\n * Get a filesystem instance.\n *\n * @param string|null $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function drive($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->drive($name);\n }\n\n /**\n * Get a filesystem instance.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function disk($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->disk($name);\n }\n\n /**\n * Get a default cloud filesystem instance.\n *\n * @return \\Illuminate\\Contracts\\Filesystem\\Cloud\n * @static\n */\n public static function cloud()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->cloud();\n }\n\n /**\n * Build an on-demand disk.\n *\n * @param string|array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function build($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->build($config);\n }\n\n /**\n * Create an instance of the local driver.\n *\n * @param array $config\n * @param string $name\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createLocalDriver($config, $name = 'local')\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createLocalDriver($config, $name);\n }\n\n /**\n * Create an instance of the ftp driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createFtpDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createFtpDriver($config);\n }\n\n /**\n * Create an instance of the sftp driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createSftpDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createSftpDriver($config);\n }\n\n /**\n * Create an instance of the Amazon S3 driver.\n *\n * @param array $config\n * @return \\Illuminate\\Contracts\\Filesystem\\Cloud\n * @static\n */\n public static function createS3Driver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createS3Driver($config);\n }\n\n /**\n * Create a scoped driver.\n *\n * @param array $config\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function createScopedDriver($config)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->createScopedDriver($config);\n }\n\n /**\n * Set the given disk instance.\n *\n * @param string $name\n * @param mixed $disk\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function set($name, $disk)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->set($name, $disk);\n }\n\n /**\n * Get the default driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultDriver()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->getDefaultDriver();\n }\n\n /**\n * Get the default cloud driver name.\n *\n * @return string\n * @static\n */\n public static function getDefaultCloudDriver()\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->getDefaultCloudDriver();\n }\n\n /**\n * Unset the given disk instances.\n *\n * @param array|string $disk\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function forgetDisk($disk)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->forgetDisk($disk);\n }\n\n /**\n * Disconnect the given disk and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n /**\n * Set the application instance used by the manager.\n *\n * @param \\Illuminate\\Contracts\\Foundation\\Application $app\n * @return \\Illuminate\\Filesystem\\FilesystemManager\n * @static\n */\n public static function setApplication($app)\n {\n /** @var \\Illuminate\\Filesystem\\FilesystemManager $instance */\n return $instance->setApplication($app);\n }\n\n /**\n * Determine if temporary URLs can be generated.\n *\n * @return bool\n * @static\n */\n public static function providesTemporaryUrls()\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->providesTemporaryUrls();\n }\n\n /**\n * Get a temporary URL for the file at the given path.\n *\n * @param string $path\n * @param \\DateTimeInterface $expiration\n * @param array $options\n * @return string\n * @static\n */\n public static function temporaryUrl($path, $expiration, $options = [])\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->temporaryUrl($path, $expiration, $options);\n }\n\n /**\n * Specify the name of the disk the adapter is managing.\n *\n * @param string $disk\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function diskName($disk)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->diskName($disk);\n }\n\n /**\n * Indicate that signed URLs should serve the corresponding files.\n *\n * @param bool $serve\n * @param \\Closure|null $urlGeneratorResolver\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function shouldServeSignedUrls($serve = true, $urlGeneratorResolver = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->shouldServeSignedUrls($serve, $urlGeneratorResolver);\n }\n\n /**\n * Assert that the given file or directory exists.\n *\n * @param string|array $path\n * @param string|null $content\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertExists($path, $content = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertExists($path, $content);\n }\n\n /**\n * Assert that the number of files in path equals the expected count.\n *\n * @param string $path\n * @param int $count\n * @param bool $recursive\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertCount($path, $count, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertCount($path, $count, $recursive);\n }\n\n /**\n * Assert that the given file or directory does not exist.\n *\n * @param string|array $path\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertMissing($path);\n }\n\n /**\n * Assert that the given directory is empty.\n *\n * @param string $path\n * @return \\Illuminate\\Filesystem\\LocalFilesystemAdapter\n * @static\n */\n public static function assertDirectoryEmpty($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->assertDirectoryEmpty($path);\n }\n\n /**\n * Determine if a file or directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function exists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->exists($path);\n }\n\n /**\n * Determine if a file or directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function missing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->missing($path);\n }\n\n /**\n * Determine if a file exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function fileExists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->fileExists($path);\n }\n\n /**\n * Determine if a file is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function fileMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->fileMissing($path);\n }\n\n /**\n * Determine if a directory exists.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function directoryExists($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directoryExists($path);\n }\n\n /**\n * Determine if a directory is missing.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function directoryMissing($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directoryMissing($path);\n }\n\n /**\n * Get the full path to the file that exists at the given relative path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function path($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->path($path);\n }\n\n /**\n * Get the contents of a file.\n *\n * @param string $path\n * @return string|null\n * @static\n */\n public static function get($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->get($path);\n }\n\n /**\n * Get the contents of a file as decoded JSON.\n *\n * @param string $path\n * @param int $flags\n * @return array|null\n * @static\n */\n public static function json($path, $flags = 0)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->json($path, $flags);\n }\n\n /**\n * Create a streamed response for a given file.\n *\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @param string|null $disposition\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function response($path, $name = null, $headers = [], $disposition = 'inline')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->response($path, $name, $headers, $disposition);\n }\n\n /**\n * Create a streamed download response for a given file.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function serve($request, $path, $name = null, $headers = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->serve($request, $path, $name, $headers);\n }\n\n /**\n * Create a streamed download response for a given file.\n *\n * @param string $path\n * @param string|null $name\n * @param array $headers\n * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n * @static\n */\n public static function download($path, $name = null, $headers = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->download($path, $name, $headers);\n }\n\n /**\n * Write the contents of a file.\n *\n * @param string $path\n * @param \\Psr\\Http\\Message\\StreamInterface|\\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|resource $contents\n * @param mixed $options\n * @return string|bool\n * @static\n */\n public static function put($path, $contents, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->put($path, $contents, $options);\n }\n\n /**\n * Store the uploaded file on the disk.\n *\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string $path\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|array|null $file\n * @param mixed $options\n * @return string|false\n * @static\n */\n public static function putFile($path, $file = null, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->putFile($path, $file, $options);\n }\n\n /**\n * Store the uploaded file on the disk with a given name.\n *\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string $path\n * @param \\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|array|null $file\n * @param string|array|null $name\n * @param mixed $options\n * @return string|false\n * @static\n */\n public static function putFileAs($path, $file, $name = null, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->putFileAs($path, $file, $name, $options);\n }\n\n /**\n * Get the visibility for the given path.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function getVisibility($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getVisibility($path);\n }\n\n /**\n * Set the visibility for the given path.\n *\n * @param string $path\n * @param string $visibility\n * @return bool\n * @static\n */\n public static function setVisibility($path, $visibility)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->setVisibility($path, $visibility);\n }\n\n /**\n * Prepend to a file.\n *\n * @param string $path\n * @param string $data\n * @param string $separator\n * @return bool\n * @static\n */\n public static function prepend($path, $data, $separator = '\n')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->prepend($path, $data, $separator);\n }\n\n /**\n * Append to a file.\n *\n * @param string $path\n * @param string $data\n * @param string $separator\n * @return bool\n * @static\n */\n public static function append($path, $data, $separator = '\n')\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->append($path, $data, $separator);\n }\n\n /**\n * Delete the file at a given path.\n *\n * @param string|array $paths\n * @return bool\n * @static\n */\n public static function delete($paths)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->delete($paths);\n }\n\n /**\n * Copy a file to a new location.\n *\n * @param string $from\n * @param string $to\n * @return bool\n * @static\n */\n public static function copy($from, $to)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->copy($from, $to);\n }\n\n /**\n * Move a file to a new location.\n *\n * @param string $from\n * @param string $to\n * @return bool\n * @static\n */\n public static function move($from, $to)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->move($from, $to);\n }\n\n /**\n * Get the file size of a given file.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function size($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->size($path);\n }\n\n /**\n * Get the checksum for a file.\n *\n * @return string|false\n * @throws UnableToProvideChecksum\n * @static\n */\n public static function checksum($path, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->checksum($path, $options);\n }\n\n /**\n * Get the mime-type of a given file.\n *\n * @param string $path\n * @return string|false\n * @static\n */\n public static function mimeType($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->mimeType($path);\n }\n\n /**\n * Get the file's last modification time.\n *\n * @param string $path\n * @return int\n * @static\n */\n public static function lastModified($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->lastModified($path);\n }\n\n /**\n * Get a resource to read the file.\n *\n * @param string $path\n * @return resource|null The path resource or null on failure.\n * @static\n */\n public static function readStream($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->readStream($path);\n }\n\n /**\n * Write a new file using a stream.\n *\n * @param string $path\n * @param resource $resource\n * @param array $options\n * @return bool\n * @static\n */\n public static function writeStream($path, $resource, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->writeStream($path, $resource, $options);\n }\n\n /**\n * Get the URL for the file at the given path.\n *\n * @param string $path\n * @return string\n * @throws \\RuntimeException\n * @static\n */\n public static function url($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->url($path);\n }\n\n /**\n * Get a temporary upload URL for the file at the given path.\n *\n * @param string $path\n * @param \\DateTimeInterface $expiration\n * @param array $options\n * @return array\n * @throws \\RuntimeException\n * @static\n */\n public static function temporaryUploadUrl($path, $expiration, $options = [])\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->temporaryUploadUrl($path, $expiration, $options);\n }\n\n /**\n * Get an array of all files in a directory.\n *\n * @param string|null $directory\n * @param bool $recursive\n * @return array\n * @static\n */\n public static function files($directory = null, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->files($directory, $recursive);\n }\n\n /**\n * Get all of the files from the given directory (recursive).\n *\n * @param string|null $directory\n * @return array\n * @static\n */\n public static function allFiles($directory = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->allFiles($directory);\n }\n\n /**\n * Get all of the directories within a given directory.\n *\n * @param string|null $directory\n * @param bool $recursive\n * @return array\n * @static\n */\n public static function directories($directory = null, $recursive = false)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->directories($directory, $recursive);\n }\n\n /**\n * Get all the directories within a given directory (recursive).\n *\n * @param string|null $directory\n * @return array\n * @static\n */\n public static function allDirectories($directory = null)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->allDirectories($directory);\n }\n\n /**\n * Create a directory.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function makeDirectory($path)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->makeDirectory($path);\n }\n\n /**\n * Recursively delete a directory.\n *\n * @param string $directory\n * @return bool\n * @static\n */\n public static function deleteDirectory($directory)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->deleteDirectory($directory);\n }\n\n /**\n * Get the Flysystem driver.\n *\n * @return \\League\\Flysystem\\FilesystemOperator\n * @static\n */\n public static function getDriver()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getDriver();\n }\n\n /**\n * Get the Flysystem adapter.\n *\n * @return \\League\\Flysystem\\FilesystemAdapter\n * @static\n */\n public static function getAdapter()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getAdapter();\n }\n\n /**\n * Get the configuration values.\n *\n * @return array\n * @static\n */\n public static function getConfig()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->getConfig();\n }\n\n /**\n * Define a custom callback that generates file download responses.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function serveUsing($callback)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n $instance->serveUsing($callback);\n }\n\n /**\n * Define a custom temporary URL builder callback.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function buildTemporaryUrlsUsing($callback)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n $instance->buildTemporaryUrlsUsing($callback);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n return \\Illuminate\\Filesystem\\LocalFilesystemAdapter::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n \\Illuminate\\Filesystem\\LocalFilesystemAdapter::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n //Method inherited from \\Illuminate\\Filesystem\\FilesystemAdapter \n /** @var \\Illuminate\\Filesystem\\LocalFilesystemAdapter $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n /**\n * @see \\Illuminate\\Routing\\UrlGenerator\n */\n class URL {\n /**\n * Get the full URL for the current request.\n *\n * @return string\n * @static\n */\n public static function full()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->full();\n }\n\n /**\n * Get the current URL for the request.\n *\n * @return string\n * @static\n */\n public static function current()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->current();\n }\n\n /**\n * Get the URL for the previous request.\n *\n * @param mixed $fallback\n * @return string\n * @static\n */\n public static function previous($fallback = false)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->previous($fallback);\n }\n\n /**\n * Get the previous path info for the request.\n *\n * @param mixed $fallback\n * @return string\n * @static\n */\n public static function previousPath($fallback = false)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->previousPath($fallback);\n }\n\n /**\n * Generate an absolute URL to the given path.\n *\n * @param string $path\n * @param mixed $extra\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function to($path, $extra = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->to($path, $extra, $secure);\n }\n\n /**\n * Generate an absolute URL with the given query parameters.\n *\n * @param string $path\n * @param array $query\n * @param mixed $extra\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function query($path, $query = [], $extra = [], $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->query($path, $query, $extra, $secure);\n }\n\n /**\n * Generate a secure, absolute URL to the given path.\n *\n * @param string $path\n * @param array $parameters\n * @return string\n * @static\n */\n public static function secure($path, $parameters = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->secure($path, $parameters);\n }\n\n /**\n * Generate the URL to an application asset.\n *\n * @param string $path\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function asset($path, $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->asset($path, $secure);\n }\n\n /**\n * Generate the URL to a secure asset.\n *\n * @param string $path\n * @return string\n * @static\n */\n public static function secureAsset($path)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->secureAsset($path);\n }\n\n /**\n * Generate the URL to an asset from a custom root domain such as CDN, etc.\n *\n * @param string $root\n * @param string $path\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function assetFrom($root, $path, $secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->assetFrom($root, $path, $secure);\n }\n\n /**\n * Get the default scheme for a raw URL.\n *\n * @param bool|null $secure\n * @return string\n * @static\n */\n public static function formatScheme($secure = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatScheme($secure);\n }\n\n /**\n * Create a signed route URL for a named route.\n *\n * @param \\BackedEnum|string $name\n * @param mixed $parameters\n * @param \\DateTimeInterface|\\DateInterval|int|null $expiration\n * @param bool $absolute\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function signedRoute($name, $parameters = [], $expiration = null, $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->signedRoute($name, $parameters, $expiration, $absolute);\n }\n\n /**\n * Create a temporary signed route URL for a named route.\n *\n * @param \\BackedEnum|string $name\n * @param \\DateTimeInterface|\\DateInterval|int $expiration\n * @param array $parameters\n * @param bool $absolute\n * @return string\n * @static\n */\n public static function temporarySignedRoute($name, $expiration, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->temporarySignedRoute($name, $expiration, $parameters, $absolute);\n }\n\n /**\n * Determine if the given request has a valid signature.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param bool $absolute\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasValidSignature($request, $absolute = true, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasValidSignature($request, $absolute, $ignoreQuery);\n }\n\n /**\n * Determine if the given request has a valid signature for a relative URL.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasValidRelativeSignature($request, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasValidRelativeSignature($request, $ignoreQuery);\n }\n\n /**\n * Determine if the signature from the given request matches the URL.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @param bool $absolute\n * @param \\Closure|array $ignoreQuery\n * @return bool\n * @static\n */\n public static function hasCorrectSignature($request, $absolute = true, $ignoreQuery = [])\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->hasCorrectSignature($request, $absolute, $ignoreQuery);\n }\n\n /**\n * Determine if the expires timestamp from the given request is not from the past.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return bool\n * @static\n */\n public static function signatureHasNotExpired($request)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->signatureHasNotExpired($request);\n }\n\n /**\n * Get the URL to a named route.\n *\n * @param \\BackedEnum|string $name\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\Symfony\\Component\\Routing\\Exception\\RouteNotFoundException|\\InvalidArgumentException\n * @static\n */\n public static function route($name, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->route($name, $parameters, $absolute);\n }\n\n /**\n * Get the URL for a given route instance.\n *\n * @param \\Illuminate\\Routing\\Route $route\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\Illuminate\\Routing\\Exceptions\\UrlGenerationException\n * @static\n */\n public static function toRoute($route, $parameters, $absolute)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->toRoute($route, $parameters, $absolute);\n }\n\n /**\n * Get the URL to a controller action.\n *\n * @param string|array $action\n * @param mixed $parameters\n * @param bool $absolute\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function action($action, $parameters = [], $absolute = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->action($action, $parameters, $absolute);\n }\n\n /**\n * Format the array of URL parameters.\n *\n * @param mixed $parameters\n * @return array\n * @static\n */\n public static function formatParameters($parameters)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatParameters($parameters);\n }\n\n /**\n * Get the base URL for the request.\n *\n * @param string $scheme\n * @param string|null $root\n * @return string\n * @static\n */\n public static function formatRoot($scheme, $root = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatRoot($scheme, $root);\n }\n\n /**\n * Format the given URL segments into a single URL.\n *\n * @param string $root\n * @param string $path\n * @param \\Illuminate\\Routing\\Route|null $route\n * @return string\n * @static\n */\n public static function format($root, $path, $route = null)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->format($root, $path, $route);\n }\n\n /**\n * Determine if the given path is a valid URL.\n *\n * @param string $path\n * @return bool\n * @static\n */\n public static function isValidUrl($path)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->isValidUrl($path);\n }\n\n /**\n * Set the default named parameters used by the URL generator.\n *\n * @param array $defaults\n * @return void\n * @static\n */\n public static function defaults($defaults)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->defaults($defaults);\n }\n\n /**\n * Get the default named parameters used by the URL generator.\n *\n * @return array\n * @static\n */\n public static function getDefaultParameters()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getDefaultParameters();\n }\n\n /**\n * Force the scheme for URLs.\n *\n * @param string|null $scheme\n * @return void\n * @static\n */\n public static function forceScheme($scheme)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceScheme($scheme);\n }\n\n /**\n * Force the use of the HTTPS scheme for all generated URLs.\n *\n * @param bool $force\n * @return void\n * @static\n */\n public static function forceHttps($force = true)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceHttps($force);\n }\n\n /**\n * Set the URL origin for all generated URLs.\n *\n * @param string|null $root\n * @return void\n * @static\n */\n public static function useOrigin($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->useOrigin($root);\n }\n\n /**\n * Set the forced root URL.\n *\n * @param string|null $root\n * @return void\n * @deprecated Use useOrigin\n * @static\n */\n public static function forceRootUrl($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->forceRootUrl($root);\n }\n\n /**\n * Set the URL origin for all generated asset URLs.\n *\n * @param string|null $root\n * @return void\n * @static\n */\n public static function useAssetOrigin($root)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->useAssetOrigin($root);\n }\n\n /**\n * Set a callback to be used to format the host of generated URLs.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function formatHostUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatHostUsing($callback);\n }\n\n /**\n * Set a callback to be used to format the path of generated URLs.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function formatPathUsing($callback)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->formatPathUsing($callback);\n }\n\n /**\n * Get the path formatter being used by the URL generator.\n *\n * @return \\Closure\n * @static\n */\n public static function pathFormatter()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->pathFormatter();\n }\n\n /**\n * Get the request instance.\n *\n * @return \\Illuminate\\Http\\Request\n * @static\n */\n public static function getRequest()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getRequest();\n }\n\n /**\n * Set the current request instance.\n *\n * @param \\Illuminate\\Http\\Request $request\n * @return void\n * @static\n */\n public static function setRequest($request)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n $instance->setRequest($request);\n }\n\n /**\n * Set the route collection.\n *\n * @param \\Illuminate\\Routing\\RouteCollectionInterface $routes\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setRoutes($routes)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setRoutes($routes);\n }\n\n /**\n * Set the session resolver for the generator.\n *\n * @param callable $sessionResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setSessionResolver($sessionResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setSessionResolver($sessionResolver);\n }\n\n /**\n * Set the encryption key resolver.\n *\n * @param callable $keyResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setKeyResolver($keyResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setKeyResolver($keyResolver);\n }\n\n /**\n * Clone a new instance of the URL generator with a different encryption key resolver.\n *\n * @param callable $keyResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function withKeyResolver($keyResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->withKeyResolver($keyResolver);\n }\n\n /**\n * Set the callback that should be used to attempt to resolve missing named routes.\n *\n * @param callable $missingNamedRouteResolver\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function resolveMissingNamedRoutesUsing($missingNamedRouteResolver)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->resolveMissingNamedRoutesUsing($missingNamedRouteResolver);\n }\n\n /**\n * Get the root controller namespace.\n *\n * @return string\n * @static\n */\n public static function getRootControllerNamespace()\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->getRootControllerNamespace();\n }\n\n /**\n * Set the root controller namespace.\n *\n * @param string $rootNamespace\n * @return \\Illuminate\\Routing\\UrlGenerator\n * @static\n */\n public static function setRootControllerNamespace($rootNamespace)\n {\n /** @var \\Illuminate\\Routing\\UrlGenerator $instance */\n return $instance->setRootControllerNamespace($rootNamespace);\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Routing\\UrlGenerator::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Routing\\UrlGenerator::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Routing\\UrlGenerator::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Routing\\UrlGenerator::flushMacros();\n }\n\n }\n /**\n * @see \\Illuminate\\Validation\\Factory\n */\n class Validator {\n /**\n * Create a new Validator instance.\n *\n * @param array $data\n * @param array $rules\n * @param array $messages\n * @param array $attributes\n * @return \\Illuminate\\Validation\\Validator\n * @static\n */\n public static function make($data, $rules, $messages = [], $attributes = [])\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->make($data, $rules, $messages, $attributes);\n }\n\n /**\n * Validate the given data against the provided rules.\n *\n * @param array $data\n * @param array $rules\n * @param array $messages\n * @param array $attributes\n * @return array\n * @throws \\Illuminate\\Validation\\ValidationException\n * @static\n */\n public static function validate($data, $rules, $messages = [], $attributes = [])\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->validate($data, $rules, $messages, $attributes);\n }\n\n /**\n * Register a custom validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extend($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extend($rule, $extension, $message);\n }\n\n /**\n * Register a custom implicit validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extendImplicit($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extendImplicit($rule, $extension, $message);\n }\n\n /**\n * Register a custom dependent validator extension.\n *\n * @param string $rule\n * @param \\Closure|string $extension\n * @param string|null $message\n * @return void\n * @static\n */\n public static function extendDependent($rule, $extension, $message = null)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->extendDependent($rule, $extension, $message);\n }\n\n /**\n * Register a custom validator message replacer.\n *\n * @param string $rule\n * @param \\Closure|string $replacer\n * @return void\n * @static\n */\n public static function replacer($rule, $replacer)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->replacer($rule, $replacer);\n }\n\n /**\n * Indicate that unvalidated array keys should be included in validated data when the parent array is validated.\n *\n * @return void\n * @static\n */\n public static function includeUnvalidatedArrayKeys()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->includeUnvalidatedArrayKeys();\n }\n\n /**\n * Indicate that unvalidated array keys should be excluded from the validated data, even if the parent array was validated.\n *\n * @return void\n * @static\n */\n public static function excludeUnvalidatedArrayKeys()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->excludeUnvalidatedArrayKeys();\n }\n\n /**\n * Set the Validator instance resolver.\n *\n * @param \\Closure $resolver\n * @return void\n * @static\n */\n public static function resolver($resolver)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->resolver($resolver);\n }\n\n /**\n * Get the Translator implementation.\n *\n * @return \\Illuminate\\Contracts\\Translation\\Translator\n * @static\n */\n public static function getTranslator()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getTranslator();\n }\n\n /**\n * Get the Presence Verifier implementation.\n *\n * @return \\Illuminate\\Validation\\PresenceVerifierInterface\n * @static\n */\n public static function getPresenceVerifier()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getPresenceVerifier();\n }\n\n /**\n * Set the Presence Verifier implementation.\n *\n * @param \\Illuminate\\Validation\\PresenceVerifierInterface $presenceVerifier\n * @return void\n * @static\n */\n public static function setPresenceVerifier($presenceVerifier)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n $instance->setPresenceVerifier($presenceVerifier);\n }\n\n /**\n * Get the container instance used by the validation factory.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container|null\n * @static\n */\n public static function getContainer()\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the container instance used by the validation factory.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return \\Illuminate\\Validation\\Factory\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\Validation\\Factory $instance */\n return $instance->setContainer($container);\n }\n\n }\n /**\n * @see \\Illuminate\\View\\Factory\n */\n class View {\n /**\n * Get the evaluated view contents for the given view.\n *\n * @param string $path\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @static\n */\n public static function file($path, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->file($path, $data, $mergeData);\n }\n\n /**\n * Get the evaluated view contents for the given view.\n *\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @static\n */\n public static function make($view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->make($view, $data, $mergeData);\n }\n\n /**\n * Get the first view that actually exists from the given list.\n *\n * @param array $views\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return \\Illuminate\\Contracts\\View\\View\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function first($views, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->first($views, $data, $mergeData);\n }\n\n /**\n * Get the rendered content of the view based on a given condition.\n *\n * @param bool $condition\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return string\n * @static\n */\n public static function renderWhen($condition, $view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderWhen($condition, $view, $data, $mergeData);\n }\n\n /**\n * Get the rendered content of the view based on the negation of a given condition.\n *\n * @param bool $condition\n * @param string $view\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $data\n * @param array $mergeData\n * @return string\n * @static\n */\n public static function renderUnless($condition, $view, $data = [], $mergeData = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderUnless($condition, $view, $data, $mergeData);\n }\n\n /**\n * Get the rendered contents of a partial from a loop.\n *\n * @param string $view\n * @param array $data\n * @param string $iterator\n * @param string $empty\n * @return string\n * @static\n */\n public static function renderEach($view, $data, $iterator, $empty = 'raw|')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderEach($view, $data, $iterator, $empty);\n }\n\n /**\n * Determine if a given view exists.\n *\n * @param string $view\n * @return bool\n * @static\n */\n public static function exists($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->exists($view);\n }\n\n /**\n * Get the appropriate view engine for the given path.\n *\n * @param string $path\n * @return \\Illuminate\\Contracts\\View\\Engine\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function getEngineFromPath($path)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getEngineFromPath($path);\n }\n\n /**\n * Add a piece of shared data to the environment.\n *\n * @param array|string $key\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function share($key, $value = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->share($key, $value);\n }\n\n /**\n * Increment the rendering counter.\n *\n * @return void\n * @static\n */\n public static function incrementRender()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->incrementRender();\n }\n\n /**\n * Decrement the rendering counter.\n *\n * @return void\n * @static\n */\n public static function decrementRender()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->decrementRender();\n }\n\n /**\n * Check if there are no active render operations.\n *\n * @return bool\n * @static\n */\n public static function doneRendering()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->doneRendering();\n }\n\n /**\n * Determine if the given once token has been rendered.\n *\n * @param string $id\n * @return bool\n * @static\n */\n public static function hasRenderedOnce($id)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->hasRenderedOnce($id);\n }\n\n /**\n * Mark the given once token as having been rendered.\n *\n * @param string $id\n * @return void\n * @static\n */\n public static function markAsRenderedOnce($id)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->markAsRenderedOnce($id);\n }\n\n /**\n * Add a location to the array of view locations.\n *\n * @param string $location\n * @return void\n * @static\n */\n public static function addLocation($location)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addLocation($location);\n }\n\n /**\n * Prepend a location to the array of view locations.\n *\n * @param string $location\n * @return void\n * @static\n */\n public static function prependLocation($location)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->prependLocation($location);\n }\n\n /**\n * Add a new namespace to the loader.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function addNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->addNamespace($namespace, $hints);\n }\n\n /**\n * Prepend a new namespace to the loader.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function prependNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->prependNamespace($namespace, $hints);\n }\n\n /**\n * Replace the namespace hints for the given namespace.\n *\n * @param string $namespace\n * @param string|array $hints\n * @return \\Illuminate\\View\\Factory\n * @static\n */\n public static function replaceNamespace($namespace, $hints)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->replaceNamespace($namespace, $hints);\n }\n\n /**\n * Register a valid view extension and its engine.\n *\n * @param string $extension\n * @param string $engine\n * @param \\Closure|null $resolver\n * @return void\n * @static\n */\n public static function addExtension($extension, $engine, $resolver = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addExtension($extension, $engine, $resolver);\n }\n\n /**\n * Flush all of the factory state like sections and stacks.\n *\n * @return void\n * @static\n */\n public static function flushState()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushState();\n }\n\n /**\n * Flush all of the section contents if done rendering.\n *\n * @return void\n * @static\n */\n public static function flushStateIfDoneRendering()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushStateIfDoneRendering();\n }\n\n /**\n * Get the extension to engine bindings.\n *\n * @return array\n * @static\n */\n public static function getExtensions()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getExtensions();\n }\n\n /**\n * Get the engine resolver instance.\n *\n * @return \\Illuminate\\View\\Engines\\EngineResolver\n * @static\n */\n public static function getEngineResolver()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getEngineResolver();\n }\n\n /**\n * Get the view finder instance.\n *\n * @return \\Illuminate\\View\\ViewFinderInterface\n * @static\n */\n public static function getFinder()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFinder();\n }\n\n /**\n * Set the view finder instance.\n *\n * @param \\Illuminate\\View\\ViewFinderInterface $finder\n * @return void\n * @static\n */\n public static function setFinder($finder)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setFinder($finder);\n }\n\n /**\n * Flush the cache of views located by the finder.\n *\n * @return void\n * @static\n */\n public static function flushFinderCache()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushFinderCache();\n }\n\n /**\n * Get the event dispatcher instance.\n *\n * @return \\Illuminate\\Contracts\\Events\\Dispatcher\n * @static\n */\n public static function getDispatcher()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getDispatcher();\n }\n\n /**\n * Set the event dispatcher instance.\n *\n * @param \\Illuminate\\Contracts\\Events\\Dispatcher $events\n * @return void\n * @static\n */\n public static function setDispatcher($events)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setDispatcher($events);\n }\n\n /**\n * Get the IoC container instance.\n *\n * @return \\Illuminate\\Contracts\\Container\\Container\n * @static\n */\n public static function getContainer()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getContainer();\n }\n\n /**\n * Set the IoC container instance.\n *\n * @param \\Illuminate\\Contracts\\Container\\Container $container\n * @return void\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->setContainer($container);\n }\n\n /**\n * Get an item from the shared data.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function shared($key, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->shared($key, $default);\n }\n\n /**\n * Get all of the shared data for the environment.\n *\n * @return array\n * @static\n */\n public static function getShared()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getShared();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\View\\Factory::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\View\\Factory::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\View\\Factory::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\View\\Factory::flushMacros();\n }\n\n /**\n * Start a component rendering process.\n *\n * @param \\Illuminate\\Contracts\\View\\View|\\Illuminate\\Contracts\\Support\\Htmlable|\\Closure|string $view\n * @param array $data\n * @return void\n * @static\n */\n public static function startComponent($view, $data = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startComponent($view, $data);\n }\n\n /**\n * Get the first view that actually exists from the given list, and start a component.\n *\n * @param array $names\n * @param array $data\n * @return void\n * @static\n */\n public static function startComponentFirst($names, $data = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startComponentFirst($names, $data);\n }\n\n /**\n * Render the current component.\n *\n * @return string\n * @static\n */\n public static function renderComponent()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderComponent();\n }\n\n /**\n * Get an item from the component data that exists above the current component.\n *\n * @param string $key\n * @param mixed $default\n * @return mixed\n * @static\n */\n public static function getConsumableComponentData($key, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getConsumableComponentData($key, $default);\n }\n\n /**\n * Start the slot rendering process.\n *\n * @param string $name\n * @param string|null $content\n * @param array $attributes\n * @return void\n * @static\n */\n public static function slot($name, $content = null, $attributes = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->slot($name, $content, $attributes);\n }\n\n /**\n * Save the slot content for rendering.\n *\n * @return void\n * @static\n */\n public static function endSlot()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->endSlot();\n }\n\n /**\n * Register a view creator event.\n *\n * @param array|string $views\n * @param \\Closure|string $callback\n * @return array\n * @static\n */\n public static function creator($views, $callback)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->creator($views, $callback);\n }\n\n /**\n * Register multiple view composers via an array.\n *\n * @param array $composers\n * @return array\n * @static\n */\n public static function composers($composers)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->composers($composers);\n }\n\n /**\n * Register a view composer event.\n *\n * @param array|string $views\n * @param \\Closure|string $callback\n * @return array\n * @static\n */\n public static function composer($views, $callback)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->composer($views, $callback);\n }\n\n /**\n * Call the composer for a given view.\n *\n * @param \\Illuminate\\Contracts\\View\\View $view\n * @return void\n * @static\n */\n public static function callComposer($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->callComposer($view);\n }\n\n /**\n * Call the creator for a given view.\n *\n * @param \\Illuminate\\Contracts\\View\\View $view\n * @return void\n * @static\n */\n public static function callCreator($view)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->callCreator($view);\n }\n\n /**\n * Start injecting content into a fragment.\n *\n * @param string $fragment\n * @return void\n * @static\n */\n public static function startFragment($fragment)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startFragment($fragment);\n }\n\n /**\n * Stop injecting content into a fragment.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopFragment()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopFragment();\n }\n\n /**\n * Get the contents of a fragment.\n *\n * @param string $name\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function getFragment($name, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFragment($name, $default);\n }\n\n /**\n * Get the entire array of rendered fragments.\n *\n * @return array\n * @static\n */\n public static function getFragments()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getFragments();\n }\n\n /**\n * Flush all of the fragments.\n *\n * @return void\n * @static\n */\n public static function flushFragments()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushFragments();\n }\n\n /**\n * Start injecting content into a section.\n *\n * @param string $section\n * @param string|null $content\n * @return void\n * @static\n */\n public static function startSection($section, $content = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startSection($section, $content);\n }\n\n /**\n * Inject inline content into a section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function inject($section, $content)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->inject($section, $content);\n }\n\n /**\n * Stop injecting content into a section and return its contents.\n *\n * @return string\n * @static\n */\n public static function yieldSection()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldSection();\n }\n\n /**\n * Stop injecting content into a section.\n *\n * @param bool $overwrite\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopSection($overwrite = false)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopSection($overwrite);\n }\n\n /**\n * Stop injecting content into a section and append it.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function appendSection()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->appendSection();\n }\n\n /**\n * Get the string contents of a section.\n *\n * @param string $section\n * @param string $default\n * @return string\n * @static\n */\n public static function yieldContent($section, $default = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldContent($section, $default);\n }\n\n /**\n * Get the parent placeholder for the current request.\n *\n * @param string $section\n * @return string\n * @static\n */\n public static function parentPlaceholder($section = '')\n {\n return \\Illuminate\\View\\Factory::parentPlaceholder($section);\n }\n\n /**\n * Check if section exists.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasSection($name)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->hasSection($name);\n }\n\n /**\n * Check if section does not exist.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function sectionMissing($name)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->sectionMissing($name);\n }\n\n /**\n * Get the contents of a section.\n *\n * @param string $name\n * @param string|null $default\n * @return mixed\n * @static\n */\n public static function getSection($name, $default = null)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getSection($name, $default);\n }\n\n /**\n * Get the entire array of sections.\n *\n * @return array\n * @static\n */\n public static function getSections()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getSections();\n }\n\n /**\n * Flush all of the sections.\n *\n * @return void\n * @static\n */\n public static function flushSections()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushSections();\n }\n\n /**\n * Add new loop to the stack.\n *\n * @param \\Countable|array $data\n * @return void\n * @static\n */\n public static function addLoop($data)\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->addLoop($data);\n }\n\n /**\n * Increment the top loop's indices.\n *\n * @return void\n * @static\n */\n public static function incrementLoopIndices()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->incrementLoopIndices();\n }\n\n /**\n * Pop a loop from the top of the loop stack.\n *\n * @return void\n * @static\n */\n public static function popLoop()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->popLoop();\n }\n\n /**\n * Get an instance of the last loop in the stack.\n *\n * @return \\stdClass|null\n * @static\n */\n public static function getLastLoop()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getLastLoop();\n }\n\n /**\n * Get the entire loop stack.\n *\n * @return array\n * @static\n */\n public static function getLoopStack()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->getLoopStack();\n }\n\n /**\n * Start injecting content into a push section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function startPush($section, $content = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startPush($section, $content);\n }\n\n /**\n * Stop injecting content into a push section.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopPush()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopPush();\n }\n\n /**\n * Start prepending content into a push section.\n *\n * @param string $section\n * @param string $content\n * @return void\n * @static\n */\n public static function startPrepend($section, $content = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startPrepend($section, $content);\n }\n\n /**\n * Stop prepending content into a push section.\n *\n * @return string\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function stopPrepend()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->stopPrepend();\n }\n\n /**\n * Get the string contents of a push section.\n *\n * @param string $section\n * @param string $default\n * @return string\n * @static\n */\n public static function yieldPushContent($section, $default = '')\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->yieldPushContent($section, $default);\n }\n\n /**\n * Flush all of the stacks.\n *\n * @return void\n * @static\n */\n public static function flushStacks()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->flushStacks();\n }\n\n /**\n * Start a translation block.\n *\n * @param array $replacements\n * @return void\n * @static\n */\n public static function startTranslation($replacements = [])\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n $instance->startTranslation($replacements);\n }\n\n /**\n * Render the current translation.\n *\n * @return string\n * @static\n */\n public static function renderTranslation()\n {\n /** @var \\Illuminate\\View\\Factory $instance */\n return $instance->renderTranslation();\n }\n\n }\n /**\n * @see \\Illuminate\\Foundation\\Vite\n */\n class Vite {\n /**\n * Get the preloaded assets.\n *\n * @return array\n * @static\n */\n public static function preloadedAssets()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->preloadedAssets();\n }\n\n /**\n * Get the Content Security Policy nonce applied to all generated tags.\n *\n * @return string|null\n * @static\n */\n public static function cspNonce()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->cspNonce();\n }\n\n /**\n * Generate or set a Content Security Policy nonce to apply to all generated tags.\n *\n * @param string|null $nonce\n * @return string\n * @static\n */\n public static function useCspNonce($nonce = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useCspNonce($nonce);\n }\n\n /**\n * Use the given key to detect integrity hashes in the manifest.\n *\n * @param string|false $key\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useIntegrityKey($key)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useIntegrityKey($key);\n }\n\n /**\n * Set the Vite entry points.\n *\n * @param array $entryPoints\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function withEntryPoints($entryPoints)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->withEntryPoints($entryPoints);\n }\n\n /**\n * Merge additional Vite entry points with the current set.\n *\n * @param array $entryPoints\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function mergeEntryPoints($entryPoints)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->mergeEntryPoints($entryPoints);\n }\n\n /**\n * Set the filename for the manifest file.\n *\n * @param string $filename\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useManifestFilename($filename)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useManifestFilename($filename);\n }\n\n /**\n * Resolve asset paths using the provided resolver.\n *\n * @param callable|null $resolver\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function createAssetPathsUsing($resolver)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->createAssetPathsUsing($resolver);\n }\n\n /**\n * Get the Vite \"hot\" file path.\n *\n * @return string\n * @static\n */\n public static function hotFile()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->hotFile();\n }\n\n /**\n * Set the Vite \"hot\" file path.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useHotFile($path)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useHotFile($path);\n }\n\n /**\n * Set the Vite build directory.\n *\n * @param string $path\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useBuildDirectory($path)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useBuildDirectory($path);\n }\n\n /**\n * Use the given callback to resolve attributes for script tags.\n *\n * @param (callable(string, string, ?array, ?array): array)|array $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useScriptTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useScriptTagAttributes($attributes);\n }\n\n /**\n * Use the given callback to resolve attributes for style tags.\n *\n * @param (callable(string, string, ?array, ?array): array)|array $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useStyleTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useStyleTagAttributes($attributes);\n }\n\n /**\n * Use the given callback to resolve attributes for preload tags.\n *\n * @param (callable(string, string, ?array, ?array): (array|false))|array|false $attributes\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function usePreloadTagAttributes($attributes)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->usePreloadTagAttributes($attributes);\n }\n\n /**\n * Eagerly prefetch assets.\n *\n * @param int|null $concurrency\n * @param string $event\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function prefetch($concurrency = null, $event = 'load')\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->prefetch($concurrency, $event);\n }\n\n /**\n * Use the \"waterfall\" prefetching strategy.\n *\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useWaterfallPrefetching($concurrency = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useWaterfallPrefetching($concurrency);\n }\n\n /**\n * Use the \"aggressive\" prefetching strategy.\n *\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function useAggressivePrefetching()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->useAggressivePrefetching();\n }\n\n /**\n * Set the prefetching strategy.\n *\n * @param 'waterfall'|'aggressive'|null $strategy\n * @param array $config\n * @return \\Illuminate\\Foundation\\Vite\n * @static\n */\n public static function usePrefetchStrategy($strategy, $config = [])\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->usePrefetchStrategy($strategy, $config);\n }\n\n /**\n * Generate React refresh runtime script.\n *\n * @return \\Illuminate\\Support\\HtmlString|void\n * @static\n */\n public static function reactRefresh()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->reactRefresh();\n }\n\n /**\n * Get the URL for an asset.\n *\n * @param string $asset\n * @param string|null $buildDirectory\n * @return string\n * @static\n */\n public static function asset($asset, $buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->asset($asset, $buildDirectory);\n }\n\n /**\n * Get the content of a given asset.\n *\n * @param string $asset\n * @param string|null $buildDirectory\n * @return string\n * @throws \\Illuminate\\Foundation\\ViteException\n * @static\n */\n public static function content($asset, $buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->content($asset, $buildDirectory);\n }\n\n /**\n * Get a unique hash representing the current manifest, or null if there is no manifest.\n *\n * @param string|null $buildDirectory\n * @return string|null\n * @static\n */\n public static function manifestHash($buildDirectory = null)\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->manifestHash($buildDirectory);\n }\n\n /**\n * Determine if the HMR server is running.\n *\n * @return bool\n * @static\n */\n public static function isRunningHot()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->isRunningHot();\n }\n\n /**\n * Get the Vite tag content as a string of HTML.\n *\n * @return string\n * @static\n */\n public static function toHtml()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n return $instance->toHtml();\n }\n\n /**\n * Flush state.\n *\n * @return void\n * @static\n */\n public static function flush()\n {\n /** @var \\Illuminate\\Foundation\\Vite $instance */\n $instance->flush();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Foundation\\Vite::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Foundation\\Vite::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Illuminate\\Foundation\\Vite::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Foundation\\Vite::flushMacros();\n }\n\n }\n /**\n * @method static void createSubscription(array|string $channels, \\Closure $callback, string $method = 'subscribe')\n * @method static \\Illuminate\\Redis\\Limiters\\ConcurrencyLimiterBuilder funnel(string $name)\n * @method static \\Illuminate\\Redis\\Limiters\\DurationLimiterBuilder throttle(string $name)\n * @method static mixed client()\n * @method static void subscribe(array|string $channels, \\Closure $callback)\n * @method static void psubscribe(array|string $channels, \\Closure $callback)\n * @method static mixed command(string $method, array $parameters = [])\n * @method static void listen(\\Closure $callback)\n * @method static string|null getName()\n * @method static \\Illuminate\\Redis\\Connections\\Connection setName(string $name)\n * @method static \\Illuminate\\Contracts\\Events\\Dispatcher getEventDispatcher()\n * @method static void setEventDispatcher(\\Illuminate\\Contracts\\Events\\Dispatcher $events)\n * @method static void unsetEventDispatcher()\n * @method static void macro(string $name, object|callable $macro)\n * @method static void mixin(object $mixin, bool $replace = true)\n * @method static bool hasMacro(string $name)\n * @method static void flushMacros()\n * @method static mixed macroCall(string $method, array $parameters)\n * @see \\Illuminate\\Redis\\RedisManager\n */\n class Redis {\n /**\n * Get a Redis connection by name.\n *\n * @param \\UnitEnum|string|null $name\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @static\n */\n public static function connection($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Resolve the given connection by name.\n *\n * @param string|null $name\n * @return \\Illuminate\\Redis\\Connections\\Connection\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function resolve($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->resolve($name);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array\n * @static\n */\n public static function connections()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->connections();\n }\n\n /**\n * Enable the firing of Redis command events.\n *\n * @return void\n * @static\n */\n public static function enableEvents()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->enableEvents();\n }\n\n /**\n * Disable the firing of Redis command events.\n *\n * @return void\n * @static\n */\n public static function disableEvents()\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->disableEvents();\n }\n\n /**\n * Set the default driver.\n *\n * @param string $driver\n * @return void\n * @static\n */\n public static function setDriver($driver)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->setDriver($driver);\n }\n\n /**\n * Disconnect the given connection and remove from local cache.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function purge($name = null)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n $instance->purge($name);\n }\n\n /**\n * Register a custom driver creator Closure.\n *\n * @param string $driver\n * @param \\Closure $callback\n * @param-closure-this $this $callback\n * @return \\Illuminate\\Redis\\RedisManager\n * @static\n */\n public static function extend($driver, $callback)\n {\n /** @var \\Illuminate\\Redis\\RedisManager $instance */\n return $instance->extend($driver, $callback);\n }\n\n }\n }\n\nnamespace Aws\\Laravel {\n /**\n * Facade for the AWS service\n *\n */\n class AwsFacade {\n /**\n * Get a client by name using an array of constructor options.\n *\n * @param string $name Service name or namespace (e.g., DynamoDb, s3).\n * @param array $args Arguments to configure the client.\n * @return \\Aws\\AwsClientInterface\n * @throws \\InvalidArgumentException if any required options are missing or\n * the service is not supported.\n * @see Aws\\AwsClient::__construct for a list of available options for args.\n * @static\n */\n public static function createClient($name, $args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->createClient($name, $args);\n }\n\n /**\n * @static\n */\n public static function createMultiRegionClient($name, $args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->createMultiRegionClient($name, $args);\n }\n\n /**\n * Clone existing SDK instance with ability to pass an associative array\n * of extra client settings.\n *\n * @param array $args\n * @return self\n * @static\n */\n public static function copy($args = [])\n {\n /** @var \\Aws\\Sdk $instance */\n return $instance->copy($args);\n }\n\n /**\n * Determine the endpoint prefix from a client namespace.\n *\n * @param string $name Namespace name\n * @return string\n * @internal\n * @deprecated Use the `\\Aws\\manifest()` function instead.\n * @static\n */\n public static function getEndpointPrefix($name)\n {\n return \\Aws\\Sdk::getEndpointPrefix($name);\n }\n\n }\n }\n\nnamespace Laravolt\\Avatar {\n /**\n */\n class Facade {\n /**\n * @static\n */\n public static function setGenerator($generator)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setGenerator($generator);\n }\n\n /**\n * @static\n */\n public static function create($name)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->create($name);\n }\n\n /**\n * @static\n */\n public static function applyTheme($config)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->applyTheme($config);\n }\n\n /**\n * @static\n */\n public static function addTheme($name, $config)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->addTheme($name, $config);\n }\n\n /**\n * @static\n */\n public static function toBase64()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toBase64();\n }\n\n /**\n * @static\n */\n public static function save($path, $quality = 90)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->save($path, $quality);\n }\n\n /**\n * @static\n */\n public static function toSvg()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toSvg();\n }\n\n /**\n * @static\n */\n public static function toGravatar($param = null)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->toGravatar($param);\n }\n\n /**\n * @static\n */\n public static function getInitial()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getInitial();\n }\n\n /**\n * @static\n */\n public static function getImageObject()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getImageObject();\n }\n\n /**\n * @static\n */\n public static function buildAvatar()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->buildAvatar();\n }\n\n /**\n * @static\n */\n public static function getAttribute($key)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getAttribute($key);\n }\n\n /**\n * Get background color\n *\n * @static\n */\n public static function getBackground()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getBackground();\n }\n\n /**\n * Get foreground color\n *\n * @static\n */\n public static function getForeground()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getForeground();\n }\n\n /**\n * Get shape\n *\n * @static\n */\n public static function getShape()\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->getShape();\n }\n\n /**\n * @static\n */\n public static function setTheme($theme)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setTheme($theme);\n }\n\n /**\n * @static\n */\n public static function setBackground($hex)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBackground($hex);\n }\n\n /**\n * @static\n */\n public static function setForeground($hex)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setForeground($hex);\n }\n\n /**\n * @static\n */\n public static function setDimension($width, $height = null)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setDimension($width, $height);\n }\n\n /**\n * @static\n */\n public static function setResponsive($responsive)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setResponsive($responsive);\n }\n\n /**\n * @static\n */\n public static function setFontSize($size)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFontSize($size);\n }\n\n /**\n * @static\n */\n public static function setFontFamily($font)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFontFamily($font);\n }\n\n /**\n * @static\n */\n public static function setBorder($size, $color, $radius = 0)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBorder($size, $color, $radius);\n }\n\n /**\n * @static\n */\n public static function setBorderRadius($radius)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setBorderRadius($radius);\n }\n\n /**\n * @static\n */\n public static function setShape($shape)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setShape($shape);\n }\n\n /**\n * @static\n */\n public static function setChars($chars)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setChars($chars);\n }\n\n /**\n * @static\n */\n public static function setFont($font)\n {\n /** @var \\Laravolt\\Avatar\\Avatar $instance */\n return $instance->setFont($font);\n }\n\n }\n }\n\nnamespace Spatie\\Fractal\\Facades {\n /**\n * @see \\Spatie\\Fractal\\Fractal\n */\n class Fractal extends \\Spatie\\Fractalistic\\Fractal {\n /**\n * @param null|mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|\\League\\Fractal\\Serializer\\SerializerAbstract $serializer\n * @return static\n * @static\n */\n public static function create($data = null, $transformer = null, $serializer = null)\n {\n return \\Spatie\\Fractal\\Fractal::create($data, $transformer, $serializer);\n }\n\n /**\n * @static\n */\n public static function respond($statusCode = 200, $headers = [], $options = 0)\n {\n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->respond($statusCode, $headers, $options);\n }\n\n /**\n * Set the collection data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function collection($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->collection($data, $transformer, $resourceName);\n }\n\n /**\n * Set the item data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function item($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->item($data, $transformer, $resourceName);\n }\n\n /**\n * Set the primitive data that must be transformed.\n *\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @param null|string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function primitive($data, $transformer = null, $resourceName = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->primitive($data, $transformer, $resourceName);\n }\n\n /**\n * Set the data that must be transformed.\n *\n * @param string $dataType\n * @param mixed $data\n * @param null|string|callable|\\League\\Fractal\\TransformerAbstract $transformer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function data($dataType, $data, $transformer = null)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->data($dataType, $data, $transformer);\n }\n\n /**\n * Set the class or function that will perform the transform.\n *\n * @param string|callable|\\League\\Fractal\\TransformerAbstract|null $transformer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function transformWith($transformer)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->transformWith($transformer);\n }\n\n /**\n * Set the serializer to be used.\n *\n * @param string|\\League\\Fractal\\Serializer\\SerializerAbstract $serializer\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function serializeWith($serializer)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->serializeWith($serializer);\n }\n\n /**\n * Set a Fractal paginator for the data.\n *\n * @param \\League\\Fractal\\Pagination\\PaginatorInterface $paginator\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function paginateWith($paginator)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->paginateWith($paginator);\n }\n\n /**\n * Set a Fractal cursor for the data.\n *\n * @param \\League\\Fractal\\Pagination\\CursorInterface $cursor\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function withCursor($cursor)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->withCursor($cursor);\n }\n\n /**\n * Specify the includes.\n *\n * @param array|string $includes Array or string of resources to include.\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseIncludes($includes)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseIncludes($includes);\n }\n\n /**\n * Specify the excludes.\n *\n * @param array|string $excludes Array or string of resources to exclude.\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseExcludes($excludes)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseExcludes($excludes);\n }\n\n /**\n * Specify the fieldsets to include in the response.\n *\n * @param array $fieldsets array with key = resourceName and value = fields to include\n * (array or comma separated string with field names)\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function parseFieldsets($fieldsets)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->parseFieldsets($fieldsets);\n }\n\n /**\n * Set the meta data.\n *\n * @param $array,...\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function addMeta()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->addMeta();\n }\n\n /**\n * Set the resource name, to replace 'data' as the root of the collection or item.\n *\n * @param string $resourceName\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function withResourceName($resourceName)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->withResourceName($resourceName);\n }\n\n /**\n * Upper limit to how many levels of included data are allowed.\n *\n * @param int $recursionLimit\n * @return \\Spatie\\Fractal\\Fractal\n * @static\n */\n public static function limitRecursion($recursionLimit)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->limitRecursion($recursionLimit);\n }\n\n /**\n * Perform the transformation to json.\n *\n * @param int $options\n * @return string\n * @static\n */\n public static function toJson($options = 0)\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->toJson($options);\n }\n\n /**\n * Perform the transformation to array.\n *\n * @return array|null\n * @static\n */\n public static function toArray()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->toArray();\n }\n\n /**\n * Create fractal data.\n *\n * @return \\League\\Fractal\\Scope\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @throws \\Spatie\\Fractalistic\\Exceptions\\NoTransformerSpecified\n * @static\n */\n public static function createData()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->createData();\n }\n\n /**\n * Get the resource class.\n *\n * @return string\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @static\n */\n public static function getResourceClass()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResourceClass();\n }\n\n /**\n * Get the resource.\n *\n * @return \\League\\Fractal\\Resource\\ResourceInterface\n * @throws \\Spatie\\Fractalistic\\Exceptions\\InvalidTransformation\n * @static\n */\n public static function getResource()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResource();\n }\n\n /**\n * Return the name of the resource.\n *\n * @return string|null\n * @static\n */\n public static function getResourceName()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getResourceName();\n }\n\n /**\n * Convert the object into something JSON serializable.\n *\n * @return array|null\n * @static\n */\n public static function jsonSerialize()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->jsonSerialize();\n }\n\n /**\n * Get the transformer.\n *\n * @return string|callable|\\League\\Fractal\\TransformerAbstract|null\n * @static\n */\n public static function getTransformer()\n {\n //Method inherited from \\Spatie\\Fractalistic\\Fractal \n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->getTransformer();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Spatie\\Fractal\\Fractal::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Spatie\\Fractal\\Fractal::mixin($mixin, $replace);\n }\n\n /**\n * Checks if macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n return \\Spatie\\Fractal\\Fractal::hasMacro($name);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Spatie\\Fractal\\Fractal::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Spatie\\Fractal\\Fractal $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n }\n }\n\nnamespace Laratrust {\n /**\n */\n class LaratrustFacade {\n /**\n * Checks if the current user has a role by its name.\n *\n * @static\n */\n public static function hasRole($role, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->hasRole($role, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a permission by its name.\n *\n * @static\n */\n public static function hasPermission($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->hasPermission($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user does not have a permission by its name.\n *\n * @static\n */\n public static function doesntHavePermission($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->doesntHavePermission($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a permission by its name.\n * \n * Alias to hasPermission.\n *\n * @static\n */\n public static function isAbleTo($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->isAbleTo($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user does not have a permission by its name.\n * \n * Alias to doesntHavePermission.\n *\n * @static\n */\n public static function isNotAbleTo($permission, $team = null, $requireAll = false)\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->isNotAbleTo($permission, $team, $requireAll);\n }\n\n /**\n * Check if the current user has a role or permission by its name.\n *\n * @param array|string $roles The role(s) needed.\n * @param array|string $permissions The permission(s) needed.\n * @param array $options The Options.\n * @return bool\n * @static\n */\n public static function ability($roles, $permissions, $team = null, $options = [])\n {\n /** @var \\Laratrust\\Laratrust $instance */\n return $instance->ability($roles, $permissions, $team, $options);\n }\n\n }\n }\n\nnamespace Sentry\\Laravel {\n /**\n * @see \\Sentry\\State\\HubInterface\n */\n class Facade {\n /**\n * Gets the client bound to the top of the stack.\n *\n * @static\n */\n public static function getClient()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getClient();\n }\n\n /**\n * Gets the ID of the last captured event.\n *\n * @static\n */\n public static function getLastEventId()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getLastEventId();\n }\n\n /**\n * Creates a new scope to store context information that will be layered on\n * top of the current one. It is isolated, i.e. all breadcrumbs and context\n * information added to this scope will be removed once the scope ends. Be\n * sure to always remove this scope with {@see Hub::popScope} when the\n * operation finishes or throws.\n *\n * @static\n */\n public static function pushScope()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->pushScope();\n }\n\n /**\n * Removes a previously pushed scope from the stack. This restores the state\n * before the scope was pushed. All breadcrumbs and context information added\n * since the last call to {@see Hub::pushScope} are discarded.\n *\n * @static\n */\n public static function popScope()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->popScope();\n }\n\n /**\n * Creates a new scope with and executes the given operation within. The scope\n * is automatically removed once the operation finishes or throws.\n *\n * @param callable $callback The callback to be executed\n * @return mixed|void The callback's return value, upon successful execution\n * @psalm-template T\n * @psalm-param callable(Scope): T $callback\n * @psalm-return T\n * @static\n */\n public static function withScope($callback)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->withScope($callback);\n }\n\n /**\n * Calls the given callback passing to it the current scope so that any\n * operation can be run within its context.\n *\n * @static\n */\n public static function configureScope($callback)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->configureScope($callback);\n }\n\n /**\n * Binds the given client to the current scope.\n *\n * @static\n */\n public static function bindClient($client)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->bindClient($client);\n }\n\n /**\n * Captures a message event and sends it to Sentry.\n *\n * @static\n */\n public static function captureMessage($message, $level = null, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureMessage($message, $level, $hint);\n }\n\n /**\n * Captures an exception event and sends it to Sentry.\n *\n * @static\n */\n public static function captureException($exception, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureException($exception, $hint);\n }\n\n /**\n * Captures a new event using the provided data.\n *\n * @static\n */\n public static function captureEvent($event, $hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureEvent($event, $hint);\n }\n\n /**\n * Captures an event that logs the last occurred error.\n *\n * @static\n */\n public static function captureLastError($hint = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureLastError($hint);\n }\n\n /**\n * Captures a check-in.\n *\n * @param int|float|null $duration\n * @param int|float|null $duration\n * @static\n */\n public static function captureCheckIn($slug, $status, $duration = null, $monitorConfig = null, $checkInId = null)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->captureCheckIn($slug, $status, $duration, $monitorConfig, $checkInId);\n }\n\n /**\n * Records a new breadcrumb which will be attached to future events. They\n * will be added to subsequent events to provide more context on user's\n * actions prior to an error or crash.\n *\n * @static\n */\n public static function addBreadcrumb($breadcrumb)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->addBreadcrumb($breadcrumb);\n }\n\n /**\n * Gets the integration whose FQCN matches the given one if it's available on the current client.\n *\n * @param string $className The FQCN of the integration\n * @psalm-template T of IntegrationInterface\n * @psalm-param class-string<T> $className\n * @psalm-return T|null\n * @static\n */\n public static function getIntegration($className)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getIntegration($className);\n }\n\n /**\n * Starts a new `Transaction` and returns it. This is the entry point to manual\n * tracing instrumentation.\n * \n * A tree structure can be built by adding child spans to the transaction, and\n * child spans to other spans. To start a new child span within the transaction\n * or any span, call the respective `startChild()` method.\n * \n * Every child span must be finished before the transaction is finished,\n * otherwise the unfinished spans are discarded.\n * \n * The transaction must be finished with a call to its `finish()` method, at\n * which point the transaction with all its finished child spans will be sent to\n * Sentry.\n *\n * @param array<string, mixed> $customSamplingContext Additional context that will be passed to the {@see SamplingContext}\n * @param array<string, mixed> $customSamplingContext Additional context that will be passed to the {@see SamplingContext}\n * @static\n */\n public static function startTransaction($context, $customSamplingContext = [])\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->startTransaction($context, $customSamplingContext);\n }\n\n /**\n * Returns the transaction that is on the Hub.\n *\n * @static\n */\n public static function getTransaction()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getTransaction();\n }\n\n /**\n * Sets the span on the Hub.\n *\n * @static\n */\n public static function setSpan($span)\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->setSpan($span);\n }\n\n /**\n * Returns the span that is on the Hub.\n *\n * @static\n */\n public static function getSpan()\n {\n /** @var \\Sentry\\State\\Hub $instance */\n return $instance->getSpan();\n }\n\n }\n }\n\nnamespace League\\StatsD\\Laravel5\\Facade {\n /**\n * Facade for Statsd Package\n *\n * @author Aran Wilkinson <aran@aranw.net>\n * @package League\\StatsD\\Laravel5\\Facade\n */\n class StatsdFacade {\n /**\n * Singleton Reference\n *\n * @static\n */\n public static function instance($name = 'default')\n {\n return \\League\\StatsD\\Client::instance($name);\n }\n\n /**\n * Initialize Connection Details\n *\n * @param array $options Configuration options\n * @return \\League\\StatsD\\Client This instance\n * @throws ConfigurationException If port is invalid\n * @static\n */\n public static function configure($options = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->configure($options);\n }\n\n /**\n * @static\n */\n public static function getHost()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getHost();\n }\n\n /**\n * @static\n */\n public static function getPort()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getPort();\n }\n\n /**\n * @static\n */\n public static function getNamespace()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getNamespace();\n }\n\n /**\n * Get Last message sent to server\n *\n * @static\n */\n public static function getLastMessage()\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->getLastMessage();\n }\n\n /**\n * Increment a metric\n *\n * @param string|array $metrics Metric(s) to increment\n * @param int $delta Value to decrement the metric by\n * @param float $sampleRate Sample rate of metric\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function increment($metrics, $delta = 1, $sampleRate = 1.0, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->increment($metrics, $delta, $sampleRate, $tags);\n }\n\n /**\n * Decrement a metric\n *\n * @param string|array $metrics Metric(s) to decrement\n * @param int $delta Value to increment the metric by\n * @param float $sampleRate Sample rate of metric\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function decrement($metrics, $delta = 1, $sampleRate = 1.0, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->decrement($metrics, $delta, $sampleRate, $tags);\n }\n\n /**\n * Start timing the given metric\n *\n * @param string $metric Metric to time\n * @static\n */\n public static function startTiming($metric)\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->startTiming($metric);\n }\n\n /**\n * End timing the given metric and record\n *\n * @param string $metric Metric to time\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function endTiming($metric, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->endTiming($metric, $tags);\n }\n\n /**\n * Timing\n *\n * @param string $metric Metric to track\n * @param float $time Time in milliseconds\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function timing($metric, $time, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->timing($metric, $time, $tags);\n }\n\n /**\n * Send multiple timing metrics at once\n *\n * @param array $metrics key value map of metric name -> timing value\n * @throws ConnectionException\n * @static\n */\n public static function timings($metrics)\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->timings($metrics);\n }\n\n /**\n * Time a function\n *\n * @param string $metric Metric to time\n * @param callable $func Function to record\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function time($metric, $func, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->time($metric, $func, $tags);\n }\n\n /**\n * Gauges\n *\n * @param string $metric Metric to gauge\n * @param int|float $value Set the value of the gauge\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function gauge($metric, $value, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->gauge($metric, $value, $tags);\n }\n\n /**\n * Sets - count the number of unique values passed to a key\n *\n * @param string $metric\n * @param mixed $value\n * @param array $tags A list of metric tags values\n * @throws ConnectionException\n * @static\n */\n public static function set($metric, $value, $tags = [])\n {\n /** @var \\League\\StatsD\\Client $instance */\n return $instance->set($metric, $value, $tags);\n }\n\n }\n }\n\nnamespace Barryvdh\\Debugbar\\Facades {\n /**\n * @method static void alert(mixed $message)\n * @method static void critical(mixed $message)\n * @method static void debug(mixed $message)\n * @method static void emergency(mixed $message)\n * @method static void error(mixed $message)\n * @method static void info(mixed $message)\n * @method static void log(mixed $message)\n * @method static void notice(mixed $message)\n * @method static void warning(mixed $message)\n * @see \\Barryvdh\\Debugbar\\LaravelDebugbar\n */\n class Debugbar extends \\DebugBar\\DebugBar {\n /**\n * Returns the HTTP driver\n * \n * If no http driver where defined, a PhpHttpDriver is automatically created\n *\n * @return \\DebugBar\\HttpDriverInterface\n * @static\n */\n public static function getHttpDriver()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getHttpDriver();\n }\n\n /**\n * Enable the Debugbar and boot, if not already booted.\n *\n * @static\n */\n public static function enable()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->enable();\n }\n\n /**\n * Boot the debugbar (add collectors, renderer and listener)\n *\n * @static\n */\n public static function boot()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->boot();\n }\n\n /**\n * @static\n */\n public static function shouldCollect($name, $default = false)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->shouldCollect($name, $default);\n }\n\n /**\n * Adds a data collector\n *\n * @param \\DebugBar\\DataCollector\\DataCollectorInterface $collector\n * @throws DebugBarException\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function addCollector($collector)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addCollector($collector);\n }\n\n /**\n * Handle silenced errors\n *\n * @param $level\n * @param $message\n * @param string $file\n * @param int $line\n * @param array $context\n * @throws \\ErrorException\n * @static\n */\n public static function handleError($level, $message, $file = '', $line = 0, $context = [])\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->handleError($level, $message, $file, $line, $context);\n }\n\n /**\n * Starts a measure\n *\n * @param string $name Internal name, used to stop the measure\n * @param string $label Public name\n * @param string|null $collector\n * @param string|null $group\n * @static\n */\n public static function startMeasure($name, $label = null, $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->startMeasure($name, $label, $collector, $group);\n }\n\n /**\n * Stops a measure\n *\n * @param string $name\n * @static\n */\n public static function stopMeasure($name)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->stopMeasure($name);\n }\n\n /**\n * Adds an exception to be profiled in the debug bar\n *\n * @param \\Exception $e\n * @deprecated in favor of addThrowable\n * @static\n */\n public static function addException($e)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addException($e);\n }\n\n /**\n * Adds an exception to be profiled in the debug bar\n *\n * @param \\Throwable $e\n * @static\n */\n public static function addThrowable($e)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addThrowable($e);\n }\n\n /**\n * Returns a JavascriptRenderer for this instance\n *\n * @param string $baseUrl\n * @param string $basePath\n * @return \\Barryvdh\\Debugbar\\JavascriptRenderer\n * @static\n */\n public static function getJavascriptRenderer($baseUrl = null, $basePath = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getJavascriptRenderer($baseUrl, $basePath);\n }\n\n /**\n * Modify the response and inject the debugbar (or data in headers)\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Request $request\n * @param \\Symfony\\Component\\HttpFoundation\\Response $response\n * @return \\Symfony\\Component\\HttpFoundation\\Response\n * @static\n */\n public static function modifyResponse($request, $response)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->modifyResponse($request, $response);\n }\n\n /**\n * Check if the Debugbar is enabled\n *\n * @return boolean\n * @static\n */\n public static function isEnabled()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isEnabled();\n }\n\n /**\n * Collects the data from the collectors\n *\n * @return array\n * @static\n */\n public static function collect()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->collect();\n }\n\n /**\n * Injects the web debug toolbar into the given Response.\n *\n * @param \\Symfony\\Component\\HttpFoundation\\Response $response A Response instance\n * Based on https://github.com/symfony/WebProfilerBundle/blob/master/EventListener/WebDebugToolbarListener.php\n * @static\n */\n public static function injectDebugbar($response)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->injectDebugbar($response);\n }\n\n /**\n * Checks if there is stacked data in the session\n *\n * @return boolean\n * @static\n */\n public static function hasStackedData()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->hasStackedData();\n }\n\n /**\n * Returns the data stacked in the session\n *\n * @param boolean $delete Whether to delete the data in the session\n * @return array\n * @static\n */\n public static function getStackedData($delete = true)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStackedData($delete);\n }\n\n /**\n * Disable the Debugbar\n *\n * @static\n */\n public static function disable()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->disable();\n }\n\n /**\n * Adds a measure\n *\n * @param string $label\n * @param float $start\n * @param float $end\n * @param array|null $params\n * @param string|null $collector\n * @param string|null $group\n * @static\n */\n public static function addMeasure($label, $start, $end, $params = [], $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addMeasure($label, $start, $end, $params, $collector, $group);\n }\n\n /**\n * Utility function to measure the execution of a Closure\n *\n * @param string $label\n * @param \\Closure $closure\n * @param string|null $collector\n * @param string|null $group\n * @return mixed\n * @static\n */\n public static function measure($label, $closure, $collector = null, $group = null)\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->measure($label, $closure, $collector, $group);\n }\n\n /**\n * Collect data in a CLI request\n *\n * @return array\n * @static\n */\n public static function collectConsole()\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->collectConsole();\n }\n\n /**\n * Adds a message to the MessagesCollector\n * \n * A message can be anything from an object to a string\n *\n * @param mixed $message\n * @param string $label\n * @static\n */\n public static function addMessage($message, $label = 'info')\n {\n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->addMessage($message, $label);\n }\n\n /**\n * Checks if a data collector has been added\n *\n * @param string $name\n * @return boolean\n * @static\n */\n public static function hasCollector($name)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->hasCollector($name);\n }\n\n /**\n * Returns a data collector\n *\n * @param string $name\n * @return \\DebugBar\\DataCollector\\DataCollectorInterface\n * @throws DebugBarException\n * @static\n */\n public static function getCollector($name)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCollector($name);\n }\n\n /**\n * Returns an array of all data collectors\n *\n * @return array[DataCollectorInterface]\n * @static\n */\n public static function getCollectors()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCollectors();\n }\n\n /**\n * Sets the request id generator\n *\n * @param \\DebugBar\\RequestIdGeneratorInterface $generator\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setRequestIdGenerator($generator)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setRequestIdGenerator($generator);\n }\n\n /**\n * @return \\DebugBar\\RequestIdGeneratorInterface\n * @static\n */\n public static function getRequestIdGenerator()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getRequestIdGenerator();\n }\n\n /**\n * Returns the id of the current request\n *\n * @return string\n * @static\n */\n public static function getCurrentRequestId()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getCurrentRequestId();\n }\n\n /**\n * Sets the storage backend to use to store the collected data\n *\n * @param \\DebugBar\\StorageInterface $storage\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStorage($storage = null)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStorage($storage);\n }\n\n /**\n * @return \\DebugBar\\StorageInterface\n * @static\n */\n public static function getStorage()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStorage();\n }\n\n /**\n * Checks if the data will be persisted\n *\n * @return boolean\n * @static\n */\n public static function isDataPersisted()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isDataPersisted();\n }\n\n /**\n * Sets the HTTP driver\n *\n * @param \\DebugBar\\HttpDriverInterface $driver\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setHttpDriver($driver)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setHttpDriver($driver);\n }\n\n /**\n * Returns collected data\n * \n * Will collect the data if none have been collected yet\n *\n * @return array\n * @static\n */\n public static function getData()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getData();\n }\n\n /**\n * Returns an array of HTTP headers containing the data\n *\n * @param string $headerName\n * @param integer $maxHeaderLength\n * @return array\n * @static\n */\n public static function getDataAsHeaders($headerName = 'phpdebugbar', $maxHeaderLength = 4096, $maxTotalHeaderLength = 250000)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getDataAsHeaders($headerName, $maxHeaderLength, $maxTotalHeaderLength);\n }\n\n /**\n * Sends the data through the HTTP headers\n *\n * @param bool $useOpenHandler\n * @param string $headerName\n * @param integer $maxHeaderLength\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function sendDataInHeaders($useOpenHandler = null, $headerName = 'phpdebugbar', $maxHeaderLength = 4096)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->sendDataInHeaders($useOpenHandler, $headerName, $maxHeaderLength);\n }\n\n /**\n * Stacks the data in the session for later rendering\n *\n * @static\n */\n public static function stackData()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->stackData();\n }\n\n /**\n * Sets the key to use in the $_SESSION array\n *\n * @param string $ns\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStackDataSessionNamespace($ns)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStackDataSessionNamespace($ns);\n }\n\n /**\n * Returns the key used in the $_SESSION array\n *\n * @return string\n * @static\n */\n public static function getStackDataSessionNamespace()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->getStackDataSessionNamespace();\n }\n\n /**\n * Sets whether to only use the session to store stacked data even\n * if a storage is enabled\n *\n * @param boolean $enabled\n * @return \\Barryvdh\\Debugbar\\LaravelDebugbar\n * @static\n */\n public static function setStackAlwaysUseSessionStorage($enabled = true)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->setStackAlwaysUseSessionStorage($enabled);\n }\n\n /**\n * Checks if the session is always used to store stacked data\n * even if a storage is enabled\n *\n * @return boolean\n * @static\n */\n public static function isStackAlwaysUseSessionStorage()\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->isStackAlwaysUseSessionStorage();\n }\n\n /**\n * @static\n */\n public static function offsetSet($key, $value)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetSet($key, $value);\n }\n\n /**\n * @static\n */\n public static function offsetGet($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetGet($key);\n }\n\n /**\n * @static\n */\n public static function offsetExists($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetExists($key);\n }\n\n /**\n * @static\n */\n public static function offsetUnset($key)\n {\n //Method inherited from \\DebugBar\\DebugBar \n /** @var \\Barryvdh\\Debugbar\\LaravelDebugbar $instance */\n return $instance->offsetUnset($key);\n }\n\n }\n }\n\nnamespace Barryvdh\\DomPDF\\Facade {\n /**\n * @method static BasePDF setBaseHost(string $baseHost)\n * @method static BasePDF setBasePath(string $basePath)\n * @method static BasePDF setCanvas(\\Dompdf\\Canvas $canvas)\n * @method static BasePDF setCallbacks(array<string, mixed> $callbacks)\n * @method static BasePDF setCss(\\Dompdf\\Css\\Stylesheet $css)\n * @method static BasePDF setDefaultView(string $defaultView, array<string, mixed> $options)\n * @method static BasePDF setDom(\\DOMDocument $dom)\n * @method static BasePDF setFontMetrics(\\Dompdf\\FontMetrics $fontMetrics)\n * @method static BasePDF setHttpContext(resource|array<string, mixed> $httpContext)\n * @method static BasePDF setPaper(string|float[] $paper, string $orientation = 'portrait')\n * @method static BasePDF setProtocol(string $protocol)\n * @method static BasePDF setTree(\\Dompdf\\Frame\\FrameTree $tree)\n */\n class Pdf {\n /**\n * Get the DomPDF instance\n *\n * @static\n */\n public static function getDomPDF()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->getDomPDF();\n }\n\n /**\n * Show or hide warnings\n *\n * @static\n */\n public static function setWarnings($warnings)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setWarnings($warnings);\n }\n\n /**\n * Load a HTML string\n *\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadHTML($string, $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadHTML($string, $encoding);\n }\n\n /**\n * Load a HTML file\n *\n * @static\n */\n public static function loadFile($file)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadFile($file);\n }\n\n /**\n * Add metadata info\n *\n * @param array<string, string> $info\n * @static\n */\n public static function addInfo($info)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->addInfo($info);\n }\n\n /**\n * Load a View and convert to HTML\n *\n * @param array<string, mixed> $data\n * @param array<string, mixed> $mergeData\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadView($view, $data = [], $mergeData = [], $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadView($view, $data, $mergeData, $encoding);\n }\n\n /**\n * Set/Change an option (or array of options) in Dompdf\n *\n * @param array<string, mixed>|string $attribute\n * @param null|mixed $value\n * @static\n */\n public static function setOption($attribute, $value = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOption($attribute, $value);\n }\n\n /**\n * Replace all the Options from DomPDF\n *\n * @param array<string, mixed> $options\n * @static\n */\n public static function setOptions($options, $mergeWithDefaults = false)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOptions($options, $mergeWithDefaults);\n }\n\n /**\n * Output the PDF as a string.\n * \n * The options parameter controls the output. Accepted options are:\n * \n * 'compress' = > 1 or 0 - apply content stream compression, this is\n * on (1) by default\n *\n * @param array<string, int> $options\n * @return string The rendered PDF as string\n * @static\n */\n public static function output($options = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->output($options);\n }\n\n /**\n * Save the PDF to a file\n *\n * @static\n */\n public static function save($filename, $disk = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->save($filename, $disk);\n }\n\n /**\n * Make the PDF downloadable by the user\n *\n * @static\n */\n public static function download($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->download($filename);\n }\n\n /**\n * Return a response with the PDF to show in the browser\n *\n * @static\n */\n public static function stream($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->stream($filename);\n }\n\n /**\n * Render the PDF\n *\n * @static\n */\n public static function render()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->render();\n }\n\n /**\n * @param array<string> $pc\n * @static\n */\n public static function setEncryption($password, $ownerpassword = '', $pc = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setEncryption($password, $ownerpassword, $pc);\n }\n\n }\n /**\n * @method static BasePDF setBaseHost(string $baseHost)\n * @method static BasePDF setBasePath(string $basePath)\n * @method static BasePDF setCanvas(\\Dompdf\\Canvas $canvas)\n * @method static BasePDF setCallbacks(array<string, mixed> $callbacks)\n * @method static BasePDF setCss(\\Dompdf\\Css\\Stylesheet $css)\n * @method static BasePDF setDefaultView(string $defaultView, array<string, mixed> $options)\n * @method static BasePDF setDom(\\DOMDocument $dom)\n * @method static BasePDF setFontMetrics(\\Dompdf\\FontMetrics $fontMetrics)\n * @method static BasePDF setHttpContext(resource|array<string, mixed> $httpContext)\n * @method static BasePDF setPaper(string|float[] $paper, string $orientation = 'portrait')\n * @method static BasePDF setProtocol(string $protocol)\n * @method static BasePDF setTree(\\Dompdf\\Frame\\FrameTree $tree)\n */\n class Pdf {\n /**\n * Get the DomPDF instance\n *\n * @static\n */\n public static function getDomPDF()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->getDomPDF();\n }\n\n /**\n * Show or hide warnings\n *\n * @static\n */\n public static function setWarnings($warnings)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setWarnings($warnings);\n }\n\n /**\n * Load a HTML string\n *\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadHTML($string, $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadHTML($string, $encoding);\n }\n\n /**\n * Load a HTML file\n *\n * @static\n */\n public static function loadFile($file)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadFile($file);\n }\n\n /**\n * Add metadata info\n *\n * @param array<string, string> $info\n * @static\n */\n public static function addInfo($info)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->addInfo($info);\n }\n\n /**\n * Load a View and convert to HTML\n *\n * @param array<string, mixed> $data\n * @param array<string, mixed> $mergeData\n * @param string|null $encoding Not used yet\n * @static\n */\n public static function loadView($view, $data = [], $mergeData = [], $encoding = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->loadView($view, $data, $mergeData, $encoding);\n }\n\n /**\n * Set/Change an option (or array of options) in Dompdf\n *\n * @param array<string, mixed>|string $attribute\n * @param null|mixed $value\n * @static\n */\n public static function setOption($attribute, $value = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOption($attribute, $value);\n }\n\n /**\n * Replace all the Options from DomPDF\n *\n * @param array<string, mixed> $options\n * @static\n */\n public static function setOptions($options, $mergeWithDefaults = false)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setOptions($options, $mergeWithDefaults);\n }\n\n /**\n * Output the PDF as a string.\n * \n * The options parameter controls the output. Accepted options are:\n * \n * 'compress' = > 1 or 0 - apply content stream compression, this is\n * on (1) by default\n *\n * @param array<string, int> $options\n * @return string The rendered PDF as string\n * @static\n */\n public static function output($options = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->output($options);\n }\n\n /**\n * Save the PDF to a file\n *\n * @static\n */\n public static function save($filename, $disk = null)\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->save($filename, $disk);\n }\n\n /**\n * Make the PDF downloadable by the user\n *\n * @static\n */\n public static function download($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->download($filename);\n }\n\n /**\n * Return a response with the PDF to show in the browser\n *\n * @static\n */\n public static function stream($filename = 'document.pdf')\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->stream($filename);\n }\n\n /**\n * Render the PDF\n *\n * @static\n */\n public static function render()\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->render();\n }\n\n /**\n * @param array<string> $pc\n * @static\n */\n public static function setEncryption($password, $ownerpassword = '', $pc = [])\n {\n /** @var \\Barryvdh\\DomPDF\\PDF $instance */\n return $instance->setEncryption($password, $ownerpassword, $pc);\n }\n\n }\n }\n\nnamespace ChaseConey\\LaravelDatadogHelper {\n /**\n * @see LaravelDatadogHelper\n * @see \\Datadog\\DogStatsd\n */\n class Datadog extends \\DataDog\\DogStatsd {\n /**\n * @static\n */\n public static function send($data, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->send($data, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Log timing information\n *\n * @param string $stat The metric to in log timing info for.\n * @param float $time The elapsed time (ms) to log\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function timing($stat, $time, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->timing($stat, $time, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * A convenient alias for the timing function when used with micro-timing\n *\n * @param string $stat The metric name\n * @param float $time The elapsed time to log, IN SECONDS\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function microtiming($stat, $time, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->microtiming($stat, $time, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Gauge\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function gauge($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->gauge($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Histogram\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function histogram($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->histogram($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Distribution\n *\n * @param string $stat The metric\n * @param float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function distribution($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->distribution($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Set\n *\n * @param string $stat The metric\n * @param string|float $value The value\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function set($stat, $value, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->set($stat, $value, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * Increments one or more stats counters\n *\n * @param string|array $stats The metric(s) to increment.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param int $value the amount to increment by (default 1)\n * @return void\n * @static\n */\n public static function increment($stats, $sampleRate = 1.0, $tags = null, $value = 1, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->increment($stats, $sampleRate, $tags, $value, $cardinality);\n }\n\n /**\n * Decrements one or more stats counters.\n *\n * @param string|array $stats The metric(s) to decrement.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param int $value the amount to decrement by (default -1)\n * @return void\n * @static\n */\n public static function decrement($stats, $sampleRate = 1.0, $tags = null, $value = -1, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->decrement($stats, $sampleRate, $tags, $value, $cardinality);\n }\n\n /**\n * Updates one or more stats counters by arbitrary amounts.\n *\n * @param string|array $stats The metric(s) to update. Should be either a string or array of metrics.\n * @param int $delta The amount to increment/decrement each metric by.\n * @param float $sampleRate the rate (0-1) for sampling.\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @return void\n * @static\n */\n public static function updateStats($stats, $delta = 1, $sampleRate = 1.0, $tags = null, $cardinality = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->updateStats($stats, $delta, $sampleRate, $tags, $cardinality);\n }\n\n /**\n * @deprecated service_check will be removed in future versions in favor of serviceCheck\n * \n * Send a custom service check status over UDP\n * @param string $name service check name\n * @param int $status service check status code (see OK, WARNING,...)\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param string $hostname hostname to associate with this service check status\n * @param string $message message to associate with this service check status\n * @param int $timestamp timestamp for the service check status (defaults to now)\n * @return void\n * @static\n */\n public static function service_check($name, $status, $tags = null, $hostname = null, $message = null, $timestamp = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->service_check($name, $status, $tags, $hostname, $message, $timestamp);\n }\n\n /**\n * Send a custom service check status over UDP\n *\n * @param string $name service check name\n * @param int $status service check status code (see OK, WARNING,...)\n * @param array|string $tags Key Value array of Tag => Value, or single tag as string\n * @param string $hostname hostname to associate with this service check status\n * @param string $message message to associate with this service check status\n * @param int $timestamp timestamp for the service check status (defaults to now)\n * @return void\n * @static\n */\n public static function serviceCheck($name, $status, $tags = null, $hostname = null, $message = null, $timestamp = null)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n $instance->serviceCheck($name, $status, $tags, $hostname, $message, $timestamp);\n }\n\n /**\n * @static\n */\n public static function report($message)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->report($message);\n }\n\n /**\n * @throws \\Exception|\\Throwable\n * @static\n */\n public static function flush($message)\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->flush($message);\n }\n\n /**\n * Formats $vals array into event for submission to Datadog via UDP\n *\n * @param array $vals Optional values of the event. See\n * https://docs.datadoghq.com/api/?lang=bash#post-an-event for the valid keys\n * @return bool\n * @static\n */\n public static function event($title, $vals = [])\n {\n //Method inherited from \\DataDog\\DogStatsd \n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->event($title, $vals);\n }\n\n /**\n * @static\n */\n public static function setMetricsPrefix($metricsPrefix)\n {\n /** @var \\ChaseConey\\LaravelDatadogHelper\\Datadog\\DogStatsd $instance */\n return $instance->setMetricsPrefix($metricsPrefix);\n }\n\n }\n }\n\nnamespace Spatie\\LaravelIgnition\\Facades {\n /**\n * @see \\Spatie\\FlareClient\\Flare\n */\n class Flare {\n /**\n * @static\n */\n public static function make($apiKey = null, $contextDetector = null)\n {\n return \\Spatie\\FlareClient\\Flare::make($apiKey, $contextDetector);\n }\n\n /**\n * @static\n */\n public static function setApiToken($apiToken)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setApiToken($apiToken);\n }\n\n /**\n * @static\n */\n public static function apiTokenSet()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->apiTokenSet();\n }\n\n /**\n * @static\n */\n public static function setBaseUrl($baseUrl)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setBaseUrl($baseUrl);\n }\n\n /**\n * @static\n */\n public static function setStage($stage)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setStage($stage);\n }\n\n /**\n * @static\n */\n public static function sendReportsImmediately()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->sendReportsImmediately();\n }\n\n /**\n * @static\n */\n public static function determineVersionUsing($determineVersionCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->determineVersionUsing($determineVersionCallable);\n }\n\n /**\n * @static\n */\n public static function reportErrorLevels($reportErrorLevels)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportErrorLevels($reportErrorLevels);\n }\n\n /**\n * @static\n */\n public static function filterExceptionsUsing($filterExceptionsCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->filterExceptionsUsing($filterExceptionsCallable);\n }\n\n /**\n * @static\n */\n public static function filterReportsUsing($filterReportsCallable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->filterReportsUsing($filterReportsCallable);\n }\n\n /**\n * @param array<class-string<ArgumentReducer>|ArgumentReducer>|\\Spatie\\Backtrace\\Arguments\\ArgumentReducers|null $argumentReducers\n * @static\n */\n public static function argumentReducers($argumentReducers)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->argumentReducers($argumentReducers);\n }\n\n /**\n * @static\n */\n public static function withStackFrameArguments($withStackFrameArguments = true, $forcePHPIniSetting = false)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->withStackFrameArguments($withStackFrameArguments, $forcePHPIniSetting);\n }\n\n /**\n * @param class-string $exceptionClass\n * @static\n */\n public static function overrideGrouping($exceptionClass, $type = 'exception_message_and_class')\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->overrideGrouping($exceptionClass, $type);\n }\n\n /**\n * @static\n */\n public static function version()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->version();\n }\n\n /**\n * @return array<int, FlareMiddleware|class-string<FlareMiddleware>>\n * @static\n */\n public static function getMiddleware()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getMiddleware();\n }\n\n /**\n * @static\n */\n public static function setContextProviderDetector($contextDetector)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setContextProviderDetector($contextDetector);\n }\n\n /**\n * @static\n */\n public static function setContainer($container)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->setContainer($container);\n }\n\n /**\n * @static\n */\n public static function registerFlareHandlers()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerFlareHandlers();\n }\n\n /**\n * @static\n */\n public static function registerExceptionHandler()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerExceptionHandler();\n }\n\n /**\n * @static\n */\n public static function registerErrorHandler($errorLevels = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerErrorHandler($errorLevels);\n }\n\n /**\n * @param \\Spatie\\FlareClient\\FlareMiddleware\\FlareMiddleware|array<FlareMiddleware>|class-string<FlareMiddleware>|callable $middleware\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function registerMiddleware($middleware)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->registerMiddleware($middleware);\n }\n\n /**\n * @return array<int,FlareMiddleware|class-string<FlareMiddleware>>\n * @static\n */\n public static function getMiddlewares()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getMiddlewares();\n }\n\n /**\n * @param string $name\n * @param string $messageLevel\n * @param array<int, mixed> $metaData\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function glow($name, $messageLevel = 'info', $metaData = [])\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->glow($name, $messageLevel, $metaData);\n }\n\n /**\n * @static\n */\n public static function handleException($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->handleException($throwable);\n }\n\n /**\n * @return mixed\n * @static\n */\n public static function handleError($code, $message, $file = '', $line = 0)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->handleError($code, $message, $file, $line);\n }\n\n /**\n * @static\n */\n public static function applicationPath($applicationPath)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->applicationPath($applicationPath);\n }\n\n /**\n * @static\n */\n public static function report($throwable, $callback = null, $report = null, $handled = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->report($throwable, $callback, $report, $handled);\n }\n\n /**\n * @static\n */\n public static function reportHandled($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportHandled($throwable);\n }\n\n /**\n * @static\n */\n public static function reportMessage($message, $logLevel, $callback = null)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reportMessage($message, $logLevel, $callback);\n }\n\n /**\n * @static\n */\n public static function sendTestReport($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->sendTestReport($throwable);\n }\n\n /**\n * @static\n */\n public static function reset()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->reset();\n }\n\n /**\n * @static\n */\n public static function anonymizeIp()\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->anonymizeIp();\n }\n\n /**\n * @param array<int, string> $fieldNames\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function censorRequestBodyFields($fieldNames)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->censorRequestBodyFields($fieldNames);\n }\n\n /**\n * @static\n */\n public static function createReport($throwable)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->createReport($throwable);\n }\n\n /**\n * @static\n */\n public static function createReportFromMessage($message, $logLevel)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->createReportFromMessage($message, $logLevel);\n }\n\n /**\n * @static\n */\n public static function stage($stage)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->stage($stage);\n }\n\n /**\n * @static\n */\n public static function messageLevel($messageLevel)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->messageLevel($messageLevel);\n }\n\n /**\n * @param string $groupName\n * @param mixed $default\n * @return array<int, mixed>\n * @static\n */\n public static function getGroup($groupName = 'context', $default = [])\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->getGroup($groupName, $default);\n }\n\n /**\n * @static\n */\n public static function context($key, $value)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->context($key, $value);\n }\n\n /**\n * @param string $groupName\n * @param array<string, mixed> $properties\n * @return \\Spatie\\FlareClient\\Flare\n * @static\n */\n public static function group($groupName, $properties)\n {\n /** @var \\Spatie\\FlareClient\\Flare $instance */\n return $instance->group($groupName, $properties);\n }\n\n }\n }\n\nnamespace Vinkla\\Hashids\\Facades {\n /**\n * @method static string encode(mixed ...$numbers)\n * @method static array decode(string $hash)\n * @method static string encodeHex(string $str)\n * @method static string decodeHex(string $hash)\n */\n class Hashids extends \\GrahamCampbell\\Manager\\AbstractManager {\n /**\n * @static\n */\n public static function getFactory()\n {\n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getFactory();\n }\n\n /**\n * Get a connection instance.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return object\n * @static\n */\n public static function connection($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->connection($name);\n }\n\n /**\n * Reconnect to the given connection.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return object\n * @static\n */\n public static function reconnect($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->reconnect($name);\n }\n\n /**\n * Disconnect from the given connection.\n *\n * @param string|null $name\n * @return void\n * @static\n */\n public static function disconnect($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->disconnect($name);\n }\n\n /**\n * Get the configuration for a connection.\n *\n * @param string|null $name\n * @throws \\InvalidArgumentException\n * @return array\n * @static\n */\n public static function getConnectionConfig($name = null)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConnectionConfig($name);\n }\n\n /**\n * Get the default connection name.\n *\n * @return string\n * @static\n */\n public static function getDefaultConnection()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getDefaultConnection();\n }\n\n /**\n * Set the default connection name.\n *\n * @param string $name\n * @return void\n * @static\n */\n public static function setDefaultConnection($name)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->setDefaultConnection($name);\n }\n\n /**\n * Register an extension connection resolver.\n *\n * @param string $name\n * @param callable $resolver\n * @return void\n * @static\n */\n public static function extend($name, $resolver)\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n $instance->extend($name, $resolver);\n }\n\n /**\n * Return all of the created connections.\n *\n * @return array<string,object>\n * @static\n */\n public static function getConnections()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConnections();\n }\n\n /**\n * Get the config instance.\n *\n * @return \\Illuminate\\Contracts\\Config\\Repository\n * @static\n */\n public static function getConfig()\n {\n //Method inherited from \\GrahamCampbell\\Manager\\AbstractManager \n /** @var \\Vinkla\\Hashids\\HashidsManager $instance */\n return $instance->getConfig();\n }\n\n }\n }\n\nnamespace Illuminate\\Support {\n /**\n * @template TKey of array-key\n * @template-covariant TValue\n * @implements \\ArrayAccess<TKey, TValue>\n * @implements \\Illuminate\\Support\\Enumerable<TKey, TValue>\n */\n class Collection {\n /**\n * @see \\Barryvdh\\Debugbar\\ServiceProvider::register()\n * @static\n */\n public static function debug()\n {\n return \\Illuminate\\Support\\Collection::debug();\n }\n\n /**\n * @see \\Spatie\\Fractal\\FractalServiceProvider::packageBooted()\n * @param mixed $transformer\n * @static\n */\n public static function transformWith($transformer)\n {\n return \\Illuminate\\Support\\Collection::transformWith($transformer);\n }\n\n }\n }\n\nnamespace Illuminate\\Http {\n /**\n */\n class Request extends \\Symfony\\Component\\HttpFoundation\\Request {\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validate($rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validate($rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestValidation()\n * @param string $errorBag\n * @param array $rules\n * @param mixed $params\n * @static\n */\n public static function validateWithBag($errorBag, $rules, ...$params)\n {\n return \\Illuminate\\Http\\Request::validateWithBag($errorBag, $rules, ...$params);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignature($absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignature($absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @static\n */\n public static function hasValidRelativeSignature()\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignature();\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @param mixed $absolute\n * @static\n */\n public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolute = true)\n {\n return \\Illuminate\\Http\\Request::hasValidSignatureWhileIgnoring($ignoreQuery, $absolute);\n }\n\n /**\n * @see \\Illuminate\\Foundation\\Providers\\FoundationServiceProvider::registerRequestSignatureValidation()\n * @param mixed $ignoreQuery\n * @static\n */\n public static function hasValidRelativeSignatureWhileIgnoring($ignoreQuery = [])\n {\n return \\Illuminate\\Http\\Request::hasValidRelativeSignatureWhileIgnoring($ignoreQuery);\n }\n\n }\n }\n\nnamespace Illuminate\\Testing {\n /**\n * @template TResponse of \\Symfony\\Component\\HttpFoundation\\Response\n * @mixin \\Illuminate\\Http\\Response\n */\n class TestResponse {\n /**\n * @see \\JMac\\Testing\\AdditionalAssertionsServiceProvider::register()\n * @param array $structure\n * @static\n */\n public static function assertJsonTypedStructure($structure)\n {\n return \\Illuminate\\Testing\\TestResponse::assertJsonTypedStructure($structure);\n }\n\n /**\n * @see \\JMac\\Testing\\AdditionalAssertionsServiceProvider::register()\n * @param string $key\n * @static\n */\n public static function assertViewHasNull($key)\n {\n return \\Illuminate\\Testing\\TestResponse::assertViewHasNull($key);\n }\n\n }\n }\n\nnamespace Illuminate\\Database\\Schema {\n /**\n */\n class Blueprint {\n /**\n * @see \\Kalnoy\\Nestedset\\NestedSetServiceProvider::register()\n * @static\n */\n public static function nestedSet()\n {\n return \\Illuminate\\Database\\Schema\\Blueprint::nestedSet();\n }\n\n /**\n * @see \\Kalnoy\\Nestedset\\NestedSetServiceProvider::register()\n * @static\n */\n public static function dropNestedSet()\n {\n return \\Illuminate\\Database\\Schema\\Blueprint::dropNestedSet();\n }\n\n }\n }\n\nnamespace Illuminate\\Validation {\n /**\n */\n class Rule {\n /**\n * @see \\Propaganistas\\LaravelPhone\\PhoneServiceProvider::registerValidator()\n * @static\n */\n public static function phone()\n {\n return \\Illuminate\\Validation\\Rule::phone();\n }\n\n }\n }\n\nnamespace Illuminate\\Console\\Scheduling {\n /**\n */\n class Event {\n /**\n * @see \\Sentry\\Laravel\\Features\\ConsoleSchedulingIntegration::register()\n * @param string|null $monitorSlug\n * @param int|null $checkInMargin\n * @param int|null $maxRuntime\n * @param bool $updateMonitorConfig\n * @param int|null $failureIssueThreshold\n * @param int|null $recoveryThreshold\n * @static\n */\n public static function sentryMonitor($monitorSlug = null, $checkInMargin = null, $maxRuntime = null, $updateMonitorConfig = true, $failureIssueThreshold = null, $recoveryThreshold = null)\n {\n return \\Illuminate\\Console\\Scheduling\\Event::sentryMonitor($monitorSlug, $checkInMargin, $maxRuntime, $updateMonitorConfig, $failureIssueThreshold, $recoveryThreshold);\n }\n\n }\n }\n\nnamespace Illuminate\\Http\\Client {\n /**\n * @mixin \\Illuminate\\Http\\Client\\PendingRequest\n */\n class Factory {\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatApi();\n }\n\n /**\n * @see \\Jiminny\\Providers\\PlanhatServiceProvider::register()\n * @return \\Illuminate\\Http\\Client\\PendingRequest\n * @static\n */\n public static function planhatAnalyticsApi()\n {\n return \\Illuminate\\Http\\Client\\Factory::planhatAnalyticsApi();\n }\n\n }\n }\n\nnamespace Illuminate\\Routing {\n /**\n * @mixin \\Illuminate\\Routing\\RouteRegistrar\n */\n class Router {\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::auth()\n * @param mixed $options\n * @static\n */\n public static function auth($options = [])\n {\n return \\Illuminate\\Routing\\Router::auth($options);\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::resetPassword()\n * @static\n */\n public static function resetPassword()\n {\n return \\Illuminate\\Routing\\Router::resetPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::confirmPassword()\n * @static\n */\n public static function confirmPassword()\n {\n return \\Illuminate\\Routing\\Router::confirmPassword();\n }\n\n /**\n * @see \\Laravel\\Ui\\AuthRouteMethods::emailVerification()\n * @static\n */\n public static function emailVerification()\n {\n return \\Illuminate\\Routing\\Router::emailVerification();\n }\n\n }\n /**\n */\n class ResponseFactory {\n /**\n * @see \\Jiminny\\Providers\\ResponseMacroServiceProvider::boot()\n * @param mixed $data\n * @param mixed $status\n * @param array $headers\n * @param mixed $options\n * @static\n */\n public static function twiml($data = null, $status = 200, $headers = [], $options = 0)\n {\n return \\Illuminate\\Routing\\ResponseFactory::twiml($data, $status, $headers, $options);\n }\n\n }\n }\n\nnamespace Illuminate\\Database\\Eloquent {\n /**\n * @template TKey of array-key\n * @template TModel of \\Illuminate\\Database\\Eloquent\\Model\n * @extends \\Illuminate\\Support\\Collection<TKey, TModel>\n */\n class Collection extends \\Illuminate\\Support\\Collection {\n }\n }\n\n\nnamespace {\n class App extends \\Illuminate\\Support\\Facades\\App {}\n class Arr extends \\Illuminate\\Support\\Arr {}\n class Artisan extends \\Illuminate\\Support\\Facades\\Artisan {}\n class Auth extends \\Illuminate\\Support\\Facades\\Auth {}\n class Benchmark extends \\Illuminate\\Support\\Benchmark {}\n class Blade extends \\Illuminate\\Support\\Facades\\Blade {}\n class Broadcast extends \\Illuminate\\Support\\Facades\\Broadcast {}\n class Bus extends \\Illuminate\\Support\\Facades\\Bus {}\n class Cache extends \\Illuminate\\Support\\Facades\\Cache {}\n class Concurrency extends \\Illuminate\\Support\\Facades\\Concurrency {}\n class Config extends \\Illuminate\\Support\\Facades\\Config {}\n class Context extends \\Illuminate\\Support\\Facades\\Context {}\n class Cookie extends \\Illuminate\\Support\\Facades\\Cookie {}\n class Crypt extends \\Illuminate\\Support\\Facades\\Crypt {}\n class DB extends \\Illuminate\\Support\\Facades\\DB {}\n\n /**\n * @template TCollection of static\n * @template TModel of static\n * @template TValue of static\n * @template TValue of static\n */\n class Eloquent extends \\Illuminate\\Database\\Eloquent\\Model { /**\n * Create and return an un-saved model instance.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function make($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->make($attributes);\n }\n\n /**\n * Register a new global scope.\n *\n * @param string $identifier\n * @param \\Illuminate\\Database\\Eloquent\\Scope|\\Closure $scope\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withGlobalScope($identifier, $scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withGlobalScope($identifier, $scope);\n }\n\n /**\n * Remove a registered global scope.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Scope|string $scope\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScope($scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScope($scope);\n }\n\n /**\n * Remove all or passed registered global scopes.\n *\n * @param array|null $scopes\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScopes($scopes = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScopes($scopes);\n }\n\n /**\n * Remove all global scopes except the given scopes.\n *\n * @param array $scopes\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutGlobalScopesExcept($scopes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutGlobalScopesExcept($scopes);\n }\n\n /**\n * Get an array of global scopes that were removed from the query.\n *\n * @return array\n * @static\n */\n public static function removedScopes()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->removedScopes();\n }\n\n /**\n * Add a where clause on the primary key to the query.\n *\n * @param mixed $id\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereKey($id)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereKey($id);\n }\n\n /**\n * Add a where clause on the primary key to the query.\n *\n * @param mixed $id\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereKeyNot($id)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereKeyNot($id);\n }\n\n /**\n * Add a basic where clause to the query.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function where($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->where($column, $operator, $value, $boolean);\n }\n\n /**\n * Add a basic where clause to the query, and return the first result.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return TModel|null\n * @static\n */\n public static function firstWhere($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstWhere($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|array|string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhere($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhere($column, $operator, $value);\n }\n\n /**\n * Add a basic \"where not\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNot($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereNot($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where not\" clause to the query.\n *\n * @param (\\Closure(static): mixed)|array|string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNot($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereNot($column, $operator, $value);\n }\n\n /**\n * Add an \"order by\" clause for a timestamp to the query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function latest($column = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->latest($column);\n }\n\n /**\n * Add an \"order by\" clause for a timestamp to the query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function oldest($column = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->oldest($column);\n }\n\n /**\n * Create a collection of models from plain arrays.\n *\n * @param array $items\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function hydrate($items)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hydrate($items);\n }\n\n /**\n * Insert into the database after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return bool\n * @static\n */\n public static function fillAndInsert($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsert($values);\n }\n\n /**\n * Insert (ignoring errors) into the database after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return int\n * @static\n */\n public static function fillAndInsertOrIgnore($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsertOrIgnore($values);\n }\n\n /**\n * Insert a record into the database and get its ID after merging the model's default attributes, setting timestamps, and casting values.\n *\n * @param array<string, mixed> $values\n * @return int\n * @static\n */\n public static function fillAndInsertGetId($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillAndInsertGetId($values);\n }\n\n /**\n * Enrich the given values by merging in the model's default attributes, adding timestamps, and casting values.\n *\n * @param array<int, array<string, mixed>> $values\n * @return array<int, array<string, mixed>>\n * @static\n */\n public static function fillForInsert($values)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fillForInsert($values);\n }\n\n /**\n * Create a collection of models from a raw query.\n *\n * @param string $query\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function fromQuery($query, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->fromQuery($query, $bindings);\n }\n\n /**\n * Find a model by its primary key.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel|null)\n * @static\n */\n public static function find($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->find($id, $columns);\n }\n\n /**\n * Find a sole model by its primary key.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function findSole($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findSole($id, $columns);\n }\n\n /**\n * Find multiple models by their primary keys.\n *\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $ids\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function findMany($ids, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findMany($ids, $columns);\n }\n\n /**\n * Find a model by its primary key or throw an exception.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel)\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function findOrFail($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOrFail($id, $columns);\n }\n\n /**\n * Find a model by its primary key or return fresh model instance.\n *\n * @param mixed $id\n * @param array|string $columns\n * @return ($id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>) ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel> : TModel)\n * @static\n */\n public static function findOrNew($id, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOrNew($id, $columns);\n }\n\n /**\n * Find a model by its primary key or call a callback.\n *\n * @template TValue\n * @param mixed $id\n * @param (\\Closure(): TValue)|list<string>|string $columns\n * @param (\\Closure(): TValue)|null $callback\n * @return ( $id is (\\Illuminate\\Contracts\\Support\\Arrayable<array-key, mixed>|array<mixed>)\n * ? \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * : TModel|TValue\n * )\n * @static\n */\n public static function findOr($id, $columns = [], $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->findOr($id, $columns, $callback);\n }\n\n /**\n * Get the first record matching the attributes or instantiate it.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function firstOrNew($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrNew($attributes, $values);\n }\n\n /**\n * Get the first record matching the attributes. If the record is not found, create it.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function firstOrCreate($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrCreate($attributes, $values);\n }\n\n /**\n * Attempt to create the record. If a unique constraint violation occurs, attempt to find the matching record.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function createOrFirst($attributes = [], $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->createOrFirst($attributes, $values);\n }\n\n /**\n * Create or update a record matching the attributes, and fill it with values.\n *\n * @param array $attributes\n * @param array $values\n * @return TModel\n * @static\n */\n public static function updateOrCreate($attributes, $values = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->updateOrCreate($attributes, $values);\n }\n\n /**\n * Create a record matching the attributes, or increment the existing record.\n *\n * @param array $attributes\n * @param string $column\n * @param int|float $default\n * @param int|float $step\n * @param array $extra\n * @return TModel\n * @static\n */\n public static function incrementOrCreate($attributes, $column = 'count', $default = 1, $step = 1, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->incrementOrCreate($attributes, $column, $default, $step, $extra);\n }\n\n /**\n * Execute the query and get the first result or throw an exception.\n *\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function firstOrFail($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOrFail($columns);\n }\n\n /**\n * Execute the query and get the first result or call a callback.\n *\n * @template TValue\n * @param (\\Closure(): TValue)|list<string> $columns\n * @param (\\Closure(): TValue)|null $callback\n * @return TModel|TValue\n * @static\n */\n public static function firstOr($columns = [], $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->firstOr($columns, $callback);\n }\n\n /**\n * Execute the query and get the first result if it's the sole matching record.\n *\n * @param array|string $columns\n * @return TModel\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function sole($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->sole($columns);\n }\n\n /**\n * Get a single column's value from the first result of a query.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @static\n */\n public static function value($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->value($column);\n }\n\n /**\n * Get a single column's value from the first result of a query if it's the sole matching record.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function soleValue($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->soleValue($column);\n }\n\n /**\n * Get a single column's value from the first result of the query or throw an exception.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return mixed\n * @throws \\Illuminate\\Database\\Eloquent\\ModelNotFoundException<TModel>\n * @static\n */\n public static function valueOrFail($column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->valueOrFail($column);\n }\n\n /**\n * Execute the query as a \"select\" statement.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Collection<int, TModel>\n * @static\n */\n public static function get($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->get($columns);\n }\n\n /**\n * Get the hydrated models without eager loading.\n *\n * @param array|string $columns\n * @return array<int, TModel>\n * @static\n */\n public static function getModels($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getModels($columns);\n }\n\n /**\n * Eager load the relationships for the models.\n *\n * @param array<int, TModel> $models\n * @return array<int, TModel>\n * @static\n */\n public static function eagerLoadRelations($models)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->eagerLoadRelations($models);\n }\n\n /**\n * Register a closure to be invoked after the query is executed.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function afterQuery($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->afterQuery($callback);\n }\n\n /**\n * Invoke the \"after query\" modification callbacks.\n *\n * @param mixed $result\n * @return mixed\n * @static\n */\n public static function applyAfterQueryCallbacks($result)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->applyAfterQueryCallbacks($result);\n }\n\n /**\n * Get a lazy collection for the given query.\n *\n * @return \\Illuminate\\Support\\LazyCollection<int, TModel>\n * @static\n */\n public static function cursor()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->cursor();\n }\n\n /**\n * Get a collection with the values of a given column.\n *\n * @param string|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param string|null $key\n * @return \\Illuminate\\Support\\Collection<array-key, mixed>\n * @static\n */\n public static function pluck($column, $key = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->pluck($column, $key);\n }\n\n /**\n * Paginate the given query.\n *\n * @param int|null|\\Closure $perPage\n * @param array|string $columns\n * @param string $pageName\n * @param int|null $page\n * @param \\Closure|int|null $total\n * @return \\Illuminate\\Pagination\\LengthAwarePaginator\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function paginate($perPage = null, $columns = [], $pageName = 'page', $page = null, $total = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->paginate($perPage, $columns, $pageName, $page, $total);\n }\n\n /**\n * Paginate the given query into a simple paginator.\n *\n * @param int|null $perPage\n * @param array|string $columns\n * @param string $pageName\n * @param int|null $page\n * @return \\Illuminate\\Contracts\\Pagination\\Paginator\n * @static\n */\n public static function simplePaginate($perPage = null, $columns = [], $pageName = 'page', $page = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->simplePaginate($perPage, $columns, $pageName, $page);\n }\n\n /**\n * Paginate the given query into a cursor paginator.\n *\n * @param int|null $perPage\n * @param array|string $columns\n * @param string $cursorName\n * @param \\Illuminate\\Pagination\\Cursor|string|null $cursor\n * @return \\Illuminate\\Contracts\\Pagination\\CursorPaginator\n * @static\n */\n public static function cursorPaginate($perPage = null, $columns = [], $cursorName = 'cursor', $cursor = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->cursorPaginate($perPage, $columns, $cursorName, $cursor);\n }\n\n /**\n * Save a new model and return the instance.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function create($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->create($attributes);\n }\n\n /**\n * Save a new model and return the instance without raising model events.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function createQuietly($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->createQuietly($attributes);\n }\n\n /**\n * Save a new model and return the instance. Allow mass-assignment.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function forceCreate($attributes)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->forceCreate($attributes);\n }\n\n /**\n * Save a new model instance with mass assignment without raising model events.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function forceCreateQuietly($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->forceCreateQuietly($attributes);\n }\n\n /**\n * Insert new records or update the existing ones.\n *\n * @param array $values\n * @param array|string $uniqueBy\n * @param array|null $update\n * @return int\n * @static\n */\n public static function upsert($values, $uniqueBy, $update = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->upsert($values, $uniqueBy, $update);\n }\n\n /**\n * Register a replacement for the default delete function.\n *\n * @param \\Closure $callback\n * @return void\n * @static\n */\n public static function onDelete($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n $instance->onDelete($callback);\n }\n\n /**\n * Call the given local model scopes.\n *\n * @param array|string $scopes\n * @return static|mixed\n * @static\n */\n public static function scopes($scopes)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->scopes($scopes);\n }\n\n /**\n * Apply the scopes to the Eloquent builder instance and return it.\n *\n * @return static\n * @static\n */\n public static function applyScopes()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->applyScopes();\n }\n\n /**\n * Prevent the specified relations from being eager loaded.\n *\n * @param mixed $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function without($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->without($relations);\n }\n\n /**\n * Set the relationships that should be eager loaded while removing any previously added eager loading specifications.\n *\n * @param array<array-key, array|(\\Closure(\\Illuminate\\Database\\Eloquent\\Relations\\Relation<*,*,*>): mixed)|string>|string $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withOnly($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withOnly($relations);\n }\n\n /**\n * Create a new instance of the model being queried.\n *\n * @param array $attributes\n * @return TModel\n * @static\n */\n public static function newModelInstance($attributes = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->newModelInstance($attributes);\n }\n\n /**\n * Specify attributes that should be added to any new models created by this builder.\n * \n * The given key / value pairs will also be added as where conditions to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|array|string $attributes\n * @param mixed $value\n * @param bool $asConditions\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAttributes($attributes, $value = null, $asConditions = true)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAttributes($attributes, $value, $asConditions);\n }\n\n /**\n * Apply query-time casts to the model instance.\n *\n * @param array $casts\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withCasts($casts)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withCasts($casts);\n }\n\n /**\n * Execute the given Closure within a transaction savepoint if needed.\n *\n * @template TModelValue\n * @param \\Closure(): TModelValue $scope\n * @return TModelValue\n * @static\n */\n public static function withSavepointIfNeeded($scope)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withSavepointIfNeeded($scope);\n }\n\n /**\n * Get the underlying query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function getQuery()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getQuery();\n }\n\n /**\n * Set the underlying query builder instance.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function setQuery($query)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setQuery($query);\n }\n\n /**\n * Get a base query builder instance.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function toBase()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->toBase();\n }\n\n /**\n * Get the relationships being eagerly loaded.\n *\n * @return array\n * @static\n */\n public static function getEagerLoads()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getEagerLoads();\n }\n\n /**\n * Set the relationships being eagerly loaded.\n *\n * @param array $eagerLoad\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function setEagerLoads($eagerLoad)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setEagerLoads($eagerLoad);\n }\n\n /**\n * Indicate that the given relationships should not be eagerly loaded.\n *\n * @param array $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutEagerLoad($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutEagerLoad($relations);\n }\n\n /**\n * Flush the relationships being eagerly loaded.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withoutEagerLoads()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withoutEagerLoads();\n }\n\n /**\n * Get the \"limit\" value from the query or null if it's not set.\n *\n * @return mixed\n * @static\n */\n public static function getLimit()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getLimit();\n }\n\n /**\n * Get the \"offset\" value from the query or null if it's not set.\n *\n * @return mixed\n * @static\n */\n public static function getOffset()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getOffset();\n }\n\n /**\n * Get the model instance being queried.\n *\n * @return TModel\n * @static\n */\n public static function getModel()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getModel();\n }\n\n /**\n * Set a model instance for the model being queried.\n *\n * @template TModelNew of \\Illuminate\\Database\\Eloquent\\Model\n * @param TModelNew $model\n * @return static<TModelNew>\n * @static\n */\n public static function setModel($model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->setModel($model);\n }\n\n /**\n * Get the given macro by name.\n *\n * @param string $name\n * @return \\Closure\n * @static\n */\n public static function getMacro($name)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->getMacro($name);\n }\n\n /**\n * Checks if a macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasMacro($name)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hasMacro($name);\n }\n\n /**\n * Get the given global macro by name.\n *\n * @param string $name\n * @return \\Closure\n * @static\n */\n public static function getGlobalMacro($name)\n {\n return \\Illuminate\\Database\\Eloquent\\Builder::getGlobalMacro($name);\n }\n\n /**\n * Checks if a global macro is registered.\n *\n * @param string $name\n * @return bool\n * @static\n */\n public static function hasGlobalMacro($name)\n {\n return \\Illuminate\\Database\\Eloquent\\Builder::hasGlobalMacro($name);\n }\n\n /**\n * Clone the Eloquent query builder.\n *\n * @return static\n * @static\n */\n public static function clone()\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->clone();\n }\n\n /**\n * Register a closure to be invoked on a clone.\n *\n * @param \\Closure $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function onClone($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->onClone($callback);\n }\n\n /**\n * Chunk the results of the query.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @return bool\n * @static\n */\n public static function chunk($count, $callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunk($count, $callback);\n }\n\n /**\n * Run a map over each item while chunking.\n *\n * @template TReturn\n * @param callable(TValue): TReturn $callback\n * @param int $count\n * @return \\Illuminate\\Support\\Collection<int, TReturn>\n * @static\n */\n public static function chunkMap($callback, $count = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkMap($callback, $count);\n }\n\n /**\n * Execute a callback over each item while chunking.\n *\n * @param callable(TValue, int): mixed $callback\n * @param int $count\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function each($callback, $count = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->each($callback, $count);\n }\n\n /**\n * Chunk the results of a query by comparing IDs.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function chunkById($count, $callback, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkById($count, $callback, $column, $alias);\n }\n\n /**\n * Chunk the results of a query by comparing IDs in descending order.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function chunkByIdDesc($count, $callback, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->chunkByIdDesc($count, $callback, $column, $alias);\n }\n\n /**\n * Chunk the results of a query by comparing IDs in a given order.\n *\n * @param int $count\n * @param callable(\\Illuminate\\Support\\Collection<int, TValue>, int): mixed $callback\n * @param string|null $column\n * @param string|null $alias\n * @param bool $descending\n * @return bool\n * @throws \\RuntimeException\n * @static\n */\n public static function orderedChunkById($count, $callback, $column = null, $alias = null, $descending = false)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orderedChunkById($count, $callback, $column, $alias, $descending);\n }\n\n /**\n * Execute a callback over each item while chunking by ID.\n *\n * @param callable(TValue, int): mixed $callback\n * @param int $count\n * @param string|null $column\n * @param string|null $alias\n * @return bool\n * @static\n */\n public static function eachById($callback, $count = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->eachById($callback, $count, $column, $alias);\n }\n\n /**\n * Query lazily, by chunks of the given size.\n *\n * @param int $chunkSize\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazy($chunkSize = 1000)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazy($chunkSize);\n }\n\n /**\n * Query lazily, by chunking the results of a query by comparing IDs.\n *\n * @param int $chunkSize\n * @param string|null $column\n * @param string|null $alias\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazyById($chunkSize = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazyById($chunkSize, $column, $alias);\n }\n\n /**\n * Query lazily, by chunking the results of a query by comparing IDs in descending order.\n *\n * @param int $chunkSize\n * @param string|null $column\n * @param string|null $alias\n * @return \\Illuminate\\Support\\LazyCollection<int, TValue>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function lazyByIdDesc($chunkSize = 1000, $column = null, $alias = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->lazyByIdDesc($chunkSize, $column, $alias);\n }\n\n /**\n * Execute the query and get the first result.\n *\n * @param array|string $columns\n * @return TValue|null\n * @static\n */\n public static function first($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->first($columns);\n }\n\n /**\n * Execute the query and get the first result if it's the sole matching record.\n *\n * @param array|string $columns\n * @return TValue\n * @throws \\Illuminate\\Database\\RecordsNotFoundException\n * @throws \\Illuminate\\Database\\MultipleRecordsFoundException\n * @static\n */\n public static function baseSole($columns = [])\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->baseSole($columns);\n }\n\n /**\n * Pass the query to a given callback and then return it.\n *\n * @param callable($this): mixed $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function tap($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->tap($callback);\n }\n\n /**\n * Pass the query to a given callback and return the result.\n *\n * @template TReturn\n * @param (callable($this): TReturn) $callback\n * @return (TReturn is null|void ? $this : TReturn)\n * @static\n */\n public static function pipe($callback)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->pipe($callback);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) truthy.\n *\n * @template TWhenParameter\n * @template TWhenReturnType\n * @param (\\Closure($this): TWhenParameter)|TWhenParameter|null $value\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback\n * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default\n * @return $this|TWhenReturnType\n * @static\n */\n public static function when($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->when($value, $callback, $default);\n }\n\n /**\n * Apply the callback if the given \"value\" is (or resolves to) falsy.\n *\n * @template TUnlessParameter\n * @template TUnlessReturnType\n * @param (\\Closure($this): TUnlessParameter)|TUnlessParameter|null $value\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $callback\n * @param (callable($this, TUnlessParameter): TUnlessReturnType)|null $default\n * @return $this|TUnlessReturnType\n * @static\n */\n public static function unless($value = null, $callback = null, $default = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->unless($value, $callback, $default);\n }\n\n /**\n * Add a relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param string $operator\n * @param int $count\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function has($relation, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->has($relation, $operator, $count, $boolean, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHas($relation, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orHas($relation, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function doesntHave($relation, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->doesntHave($relation, $boolean, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orDoesntHave($relation)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orDoesntHave($relation);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n * \n * Also load the relationship with the same condition.\n *\n * @param string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withWhereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withWhereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereHas($relation, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereHas($relation, $callback, $operator, $count);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHave($relation, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHave($relation, $callback);\n }\n\n /**\n * Add a relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHave($relation, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHave($relation, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $operator\n * @param int $count\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function hasMorph($relation, $types, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->hasMorph($relation, $types, $operator, $count, $boolean, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHasMorph($relation, $types, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orHasMorph($relation, $types, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param string $boolean\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function doesntHaveMorph($relation, $types, $boolean = 'and', $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->doesntHaveMorph($relation, $types, $boolean, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with an \"or\".\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param string|array<int, string> $types\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orDoesntHaveMorph($relation, $types)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orDoesntHaveMorph($relation, $types);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereHasMorph($relation, $types, $callback, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @param string $operator\n * @param int $count\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereHasMorph($relation, $types, $callback = null, $operator = '>=', $count = 1)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereHasMorph($relation, $types, $callback, $operator, $count);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHaveMorph($relation, $types, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHaveMorph($relation, $types, $callback);\n }\n\n /**\n * Add a polymorphic relationship count / exists condition to the query with where clauses and an \"or\".\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>, string): mixed)|null $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHaveMorph($relation, $types, $callback = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHaveMorph($relation, $types, $callback);\n }\n\n /**\n * Add a basic where clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a basic where clause to a relationship query and eager-load the relationship with the same conditions.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<*, *, *>|string $relation\n * @param \\Closure|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withWhereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withWhereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add an \"or where\" clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a basic count / exists condition to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDoesntHaveRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereDoesntHaveRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add an \"or where\" clause to a relationship query.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\Relation<TRelatedModel, *, *>|string $relation\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDoesntHaveRelation($relation, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereDoesntHaveRelation($relation, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with a where clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with an \"or where\" clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with a doesn't have clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphDoesntHaveRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphDoesntHaveRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a polymorphic relationship condition to the query with an \"or doesn't have\" clause.\n *\n * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<TRelatedModel, *>|string $relation\n * @param string|array<int, string> $types\n * @param (\\Closure(\\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>): mixed)|string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphDoesntHaveRelation($relation, $types, $column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphDoesntHaveRelation($relation, $types, $column, $operator, $value);\n }\n\n /**\n * Add a morph-to relationship condition to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string|null $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMorphedTo($relation, $model, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereMorphedTo($relation, $model, $boolean);\n }\n\n /**\n * Add a not morph-to relationship condition to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotMorphedTo($relation, $model, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereNotMorphedTo($relation, $model, $boolean);\n }\n\n /**\n * Add a morph-to relationship condition to the query with an \"or where\" clause.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string|null $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMorphedTo($relation, $model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereMorphedTo($relation, $model);\n }\n\n /**\n * Add a not morph-to relationship condition to the query with an \"or where\" clause.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Relations\\MorphTo<*, *>|string $relation\n * @param \\Illuminate\\Database\\Eloquent\\Model|iterable<int, \\Illuminate\\Database\\Eloquent\\Model>|string $model\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotMorphedTo($relation, $model)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereNotMorphedTo($relation, $model);\n }\n\n /**\n * Add a \"belongs to\" relationship where clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model|\\Illuminate\\Database\\Eloquent\\Collection<int, \\Illuminate\\Database\\Eloquent\\Model> $related\n * @param string|null $relationshipName\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\Illuminate\\Database\\Eloquent\\RelationNotFoundException\n * @static\n */\n public static function whereBelongsTo($related, $relationshipName = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereBelongsTo($related, $relationshipName, $boolean);\n }\n\n /**\n * Add a \"BelongsTo\" relationship with an \"or where\" clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model $related\n * @param string|null $relationshipName\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function orWhereBelongsTo($related, $relationshipName = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereBelongsTo($related, $relationshipName);\n }\n\n /**\n * Add a \"belongs to many\" relationship where clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model|\\Illuminate\\Database\\Eloquent\\Collection<int, \\Illuminate\\Database\\Eloquent\\Model> $related\n * @param string|null $relationshipName\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\Illuminate\\Database\\Eloquent\\RelationNotFoundException\n * @static\n */\n public static function whereAttachedTo($related, $relationshipName = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->whereAttachedTo($related, $relationshipName, $boolean);\n }\n\n /**\n * Add a \"belongs to many\" relationship with an \"or where\" clause to the query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Model $related\n * @param string|null $relationshipName\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\RuntimeException\n * @static\n */\n public static function orWhereAttachedTo($related, $relationshipName = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->orWhereAttachedTo($related, $relationshipName);\n }\n\n /**\n * Add subselect queries to include an aggregate value for a relationship.\n *\n * @param mixed $relations\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string|null $function\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAggregate($relations, $column, $function = null)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAggregate($relations, $column, $function);\n }\n\n /**\n * Add subselect queries to count the relations.\n *\n * @param mixed $relations\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withCount($relations)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withCount($relations);\n }\n\n /**\n * Add subselect queries to include the max of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withMax($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withMax($relation, $column);\n }\n\n /**\n * Add subselect queries to include the min of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withMin($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withMin($relation, $column);\n }\n\n /**\n * Add subselect queries to include the sum of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withSum($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withSum($relation, $column);\n }\n\n /**\n * Add subselect queries to include the average of the relation's column.\n *\n * @param string|array $relation\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withAvg($relation, $column)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withAvg($relation, $column);\n }\n\n /**\n * Add subselect queries to include the existence of related models.\n *\n * @param string|array $relation\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function withExists($relation)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->withExists($relation);\n }\n\n /**\n * Merge the where constraints from another query to the current query.\n *\n * @param \\Illuminate\\Database\\Eloquent\\Builder<*> $from\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeConstraintsFrom($from)\n {\n /** @var \\Illuminate\\Database\\Eloquent\\Builder $instance */\n return $instance->mergeConstraintsFrom($from);\n }\n\n /**\n * Set the columns to be selected.\n *\n * @param mixed $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function select($columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->select($columns);\n }\n\n /**\n * Add a subselect expression to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function selectSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->selectSub($query, $as);\n }\n\n /**\n * Add a new \"raw\" select expression to the query.\n *\n * @param string $expression\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function selectRaw($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->selectRaw($expression, $bindings);\n }\n\n /**\n * Makes \"from\" fetch from a subquery.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function fromSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->fromSub($query, $as);\n }\n\n /**\n * Add a raw from clause to the query.\n *\n * @param string $expression\n * @param mixed $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function fromRaw($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->fromRaw($expression, $bindings);\n }\n\n /**\n * Add a new select column to the query.\n *\n * @param mixed $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addSelect($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addSelect($column);\n }\n\n /**\n * Force the query to only return distinct results.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function distinct()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->distinct();\n }\n\n /**\n * Set the table which the query is targeting.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param string|null $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function from($table, $as = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->from($table, $as);\n }\n\n /**\n * Add an index hint to suggest a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function useIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->useIndex($index);\n }\n\n /**\n * Add an index hint to force a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forceIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forceIndex($index);\n }\n\n /**\n * Add an index hint to ignore a query index.\n *\n * @param string $index\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function ignoreIndex($index)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->ignoreIndex($index);\n }\n\n /**\n * Add a join clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @param string $type\n * @param bool $where\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->join($table, $first, $operator, $second, $type, $where);\n }\n\n /**\n * Add a \"join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $second\n * @param string $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function joinWhere($table, $first, $operator, $second, $type = 'inner')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinWhere($table, $first, $operator, $second, $type);\n }\n\n /**\n * Add a subquery join clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @param string $type\n * @param bool $where\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function joinSub($query, $as, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinSub($query, $as, $first, $operator, $second, $type, $where);\n }\n\n /**\n * Add a lateral join clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function joinLateral($query, $as, $type = 'inner')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->joinLateral($query, $as, $type);\n }\n\n /**\n * Add a lateral left join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinLateral($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinLateral($query, $as);\n }\n\n /**\n * Add a left join to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoin($table, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a \"join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinWhere($table, $first, $operator, $second)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinWhere($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery left join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function leftJoinSub($query, $as, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->leftJoinSub($query, $as, $first, $operator, $second);\n }\n\n /**\n * Add a right join to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoin($table, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a \"right join where\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoinWhere($table, $first, $operator, $second)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoinWhere($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery right join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function rightJoinSub($query, $as, $first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rightJoinSub($query, $as, $first, $operator, $second);\n }\n\n /**\n * Add a \"cross join\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $table\n * @param \\Closure|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $first\n * @param string|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function crossJoin($table, $first = null, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->crossJoin($table, $first, $operator, $second);\n }\n\n /**\n * Add a subquery cross join to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @param string $as\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function crossJoinSub($query, $as)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->crossJoinSub($query, $as);\n }\n\n /**\n * Merge an array of where clauses and bindings.\n *\n * @param array $wheres\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeWheres($wheres, $bindings)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->mergeWheres($wheres, $bindings);\n }\n\n /**\n * Prepare the value and operator for a where clause.\n *\n * @param string $value\n * @param string $operator\n * @param bool $useDefault\n * @return array\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function prepareValueAndOperator($value, $operator, $useDefault = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->prepareValueAndOperator($value, $operator, $useDefault);\n }\n\n /**\n * Add a \"where\" clause comparing two columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|array $first\n * @param string|null $operator\n * @param string|null $second\n * @param string|null $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereColumn($first, $operator = null, $second = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereColumn($first, $operator, $second, $boolean);\n }\n\n /**\n * Add an \"or where\" clause comparing two columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string|array $first\n * @param string|null $operator\n * @param string|null $second\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereColumn($first, $operator = null, $second = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereColumn($first, $operator, $second);\n }\n\n /**\n * Add a raw where clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $sql\n * @param mixed $bindings\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereRaw($sql, $bindings = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereRaw($sql, $bindings, $boolean);\n }\n\n /**\n * Add a raw or where clause to the query.\n *\n * @param string $sql\n * @param mixed $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereRaw($sql, $bindings);\n }\n\n /**\n * Add a \"where like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereLike($column, $value, $caseSensitive = false, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereLike($column, $value, $caseSensitive, $boolean, $not);\n }\n\n /**\n * Add an \"or where like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereLike($column, $value, $caseSensitive = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereLike($column, $value, $caseSensitive);\n }\n\n /**\n * Add a \"where not like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotLike($column, $value, $caseSensitive = false, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotLike($column, $value, $caseSensitive, $boolean);\n }\n\n /**\n * Add an \"or where not like\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $value\n * @param bool $caseSensitive\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotLike($column, $value, $caseSensitive = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotLike($column, $value, $caseSensitive);\n }\n\n /**\n * Add a \"where in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIn($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIn($column, $values, $boolean, $not);\n }\n\n /**\n * Add an \"or where in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIn($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIn($column, $values);\n }\n\n /**\n * Add a \"where not in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotIn($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotIn($column, $values, $boolean);\n }\n\n /**\n * Add an \"or where not in\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param mixed $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotIn($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotIn($column, $values);\n }\n\n /**\n * Add a \"where in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIntegerInRaw($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIntegerInRaw($column, $values, $boolean, $not);\n }\n\n /**\n * Add an \"or where in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIntegerInRaw($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIntegerInRaw($column, $values);\n }\n\n /**\n * Add a \"where not in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereIntegerNotInRaw($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereIntegerNotInRaw($column, $values, $boolean);\n }\n\n /**\n * Add an \"or where not in raw\" clause for integer values to the query.\n *\n * @param string $column\n * @param \\Illuminate\\Contracts\\Support\\Arrayable|array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereIntegerNotInRaw($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereIntegerNotInRaw($column, $values);\n }\n\n /**\n * Add a \"where null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNull($columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNull($columns, $boolean, $not);\n }\n\n /**\n * Add an \"or where null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNull($column);\n }\n\n /**\n * Add a \"where not null\" clause to the query.\n *\n * @param string|array|\\Illuminate\\Contracts\\Database\\Query\\Expression $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotNull($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotNull($columns, $boolean);\n }\n\n /**\n * Add a where between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBetween($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBetween($column, $values, $boolean, $not);\n }\n\n /**\n * Add a where between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBetweenColumns($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBetweenColumns($column, $values, $boolean, $not);\n }\n\n /**\n * Add an or where between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBetween($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBetween($column, $values);\n }\n\n /**\n * Add an or where between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBetweenColumns($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBetweenColumns($column, $values);\n }\n\n /**\n * Add a where not between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotBetween($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotBetween($column, $values, $boolean);\n }\n\n /**\n * Add a where not between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotBetweenColumns($column, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotBetweenColumns($column, $values, $boolean);\n }\n\n /**\n * Add an or where not between statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotBetween($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotBetween($column, $values);\n }\n\n /**\n * Add an or where not between statement using columns to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotBetweenColumns($column, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotBetweenColumns($column, $values);\n }\n\n /**\n * Add a where between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereValueBetween($value, $columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereValueBetween($value, $columns, $boolean, $not);\n }\n\n /**\n * Add an or where between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereValueBetween($value, $columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereValueBetween($value, $columns);\n }\n\n /**\n * Add a where not between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereValueNotBetween($value, $columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereValueNotBetween($value, $columns, $boolean);\n }\n\n /**\n * Add an or where not between columns statement using a value to the query.\n *\n * @param mixed $value\n * @param array{\\Illuminate\\Contracts\\Database\\Query\\Expression|string, \\Illuminate\\Contracts\\Database\\Query\\Expression|string} $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereValueNotBetween($value, $columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereValueNotBetween($value, $columns);\n }\n\n /**\n * Add an \"or where not null\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotNull($column);\n }\n\n /**\n * Add a \"where date\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDate($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereDate($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where date\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDate($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereDate($column, $operator, $value);\n }\n\n /**\n * Add a \"where time\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTime($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTime($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where time\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|null $operator\n * @param \\DateTimeInterface|string|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTime($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTime($column, $operator, $value);\n }\n\n /**\n * Add a \"where day\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereDay($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereDay($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where day\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereDay($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereDay($column, $operator, $value);\n }\n\n /**\n * Add a \"where month\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereMonth($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereMonth($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where month\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereMonth($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereMonth($column, $operator, $value);\n }\n\n /**\n * Add a \"where year\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereYear($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereYear($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where year\" statement to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param \\DateTimeInterface|string|int|null $operator\n * @param \\DateTimeInterface|string|int|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereYear($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereYear($column, $operator, $value);\n }\n\n /**\n * Add a nested where statement to the query.\n *\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNested($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNested($callback, $boolean);\n }\n\n /**\n * Create a new query instance for nested where condition.\n *\n * @return \\Illuminate\\Database\\Query\\Builder\n * @static\n */\n public static function forNestedWhere()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forNestedWhere();\n }\n\n /**\n * Add another query builder as a nested where to the query builder.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addNestedWhereQuery($query, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addNestedWhereQuery($query, $boolean);\n }\n\n /**\n * Add an exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereExists($callback, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereExists($callback, $boolean, $not);\n }\n\n /**\n * Add an or exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereExists($callback, $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereExists($callback, $not);\n }\n\n /**\n * Add a where not exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNotExists($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNotExists($callback, $boolean);\n }\n\n /**\n * Add a where not exists clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $callback\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNotExists($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNotExists($callback);\n }\n\n /**\n * Add an exists clause to the query.\n *\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addWhereExistsQuery($query, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addWhereExistsQuery($query, $boolean, $not);\n }\n\n /**\n * Adds a where condition using row values.\n *\n * @param array $columns\n * @param string $operator\n * @param array $values\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function whereRowValues($columns, $operator, $values, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereRowValues($columns, $operator, $values, $boolean);\n }\n\n /**\n * Adds an or where condition using row values.\n *\n * @param array $columns\n * @param string $operator\n * @param array $values\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereRowValues($columns, $operator, $values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereRowValues($columns, $operator, $values);\n }\n\n /**\n * Add a \"where JSON contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonContains($column, $value, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonContains($column, $value, $boolean, $not);\n }\n\n /**\n * Add an \"or where JSON contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonContains($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonContains($column, $value);\n }\n\n /**\n * Add a \"where JSON not contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntContain($column, $value, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntContain($column, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON not contains\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntContain($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntContain($column, $value);\n }\n\n /**\n * Add a \"where JSON overlaps\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonOverlaps($column, $value, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonOverlaps($column, $value, $boolean, $not);\n }\n\n /**\n * Add an \"or where JSON overlaps\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonOverlaps($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonOverlaps($column, $value);\n }\n\n /**\n * Add a \"where JSON not overlap\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntOverlap($column, $value, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntOverlap($column, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON not overlap\" clause to the query.\n *\n * @param string $column\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntOverlap($column, $value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntOverlap($column, $value);\n }\n\n /**\n * Add a clause that determines if a JSON path exists to the query.\n *\n * @param string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonContainsKey($column, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonContainsKey($column, $boolean, $not);\n }\n\n /**\n * Add an \"or\" clause that determines if a JSON path exists to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonContainsKey($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonContainsKey($column);\n }\n\n /**\n * Add a clause that determines if a JSON path does not exist to the query.\n *\n * @param string $column\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonDoesntContainKey($column, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonDoesntContainKey($column, $boolean);\n }\n\n /**\n * Add an \"or\" clause that determines if a JSON path does not exist to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonDoesntContainKey($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonDoesntContainKey($column);\n }\n\n /**\n * Add a \"where JSON length\" clause to the query.\n *\n * @param string $column\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereJsonLength($column, $operator, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereJsonLength($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where JSON length\" clause to the query.\n *\n * @param string $column\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereJsonLength($column, $operator, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereJsonLength($column, $operator, $value);\n }\n\n /**\n * Handles dynamic \"where\" clauses to the query.\n *\n * @param string $method\n * @param array $parameters\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dynamicWhere($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dynamicWhere($method, $parameters);\n }\n\n /**\n * Add a \"where fulltext\" clause to the query.\n *\n * @param string|string[] $columns\n * @param string $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereFullText($columns, $value, $options = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereFullText($columns, $value, $options, $boolean);\n }\n\n /**\n * Add a \"or where fulltext\" clause to the query.\n *\n * @param string|string[] $columns\n * @param string $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereFullText($columns, $value, $options = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereFullText($columns, $value, $options);\n }\n\n /**\n * Add a \"where\" clause to the query for multiple columns with \"and\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAll($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAll($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query for multiple columns with \"and\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAll($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAll($columns, $operator, $value);\n }\n\n /**\n * Add a \"where\" clause to the query for multiple columns with \"or\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAny($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAny($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where\" clause to the query for multiple columns with \"or\" conditions between them.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAny($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAny($columns, $operator, $value);\n }\n\n /**\n * Add a \"where not\" clause to the query for multiple columns where none of the conditions should be true.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNone($columns, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNone($columns, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or where not\" clause to the query for multiple columns where none of the conditions should be true.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression[]|\\Closure[]|string[] $columns\n * @param mixed $operator\n * @param mixed $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNone($columns, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNone($columns, $operator, $value);\n }\n\n /**\n * Add a \"group by\" clause to the query.\n *\n * @param array|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $groups\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupBy(...$groups)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupBy(...$groups);\n }\n\n /**\n * Add a raw groupBy clause to the query.\n *\n * @param string $sql\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupByRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupByRaw($sql, $bindings);\n }\n\n /**\n * Add a \"having\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\Closure|string $column\n * @param \\DateTimeInterface|string|int|float|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\DateTimeInterface|string|int|float|null $value\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function having($column, $operator = null, $value = null, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->having($column, $operator, $value, $boolean);\n }\n\n /**\n * Add an \"or having\" clause to the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\Closure|string $column\n * @param \\DateTimeInterface|string|int|float|null $operator\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|\\DateTimeInterface|string|int|float|null $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHaving($column, $operator = null, $value = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHaving($column, $operator, $value);\n }\n\n /**\n * Add a nested having statement to the query.\n *\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNested($callback, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNested($callback, $boolean);\n }\n\n /**\n * Add another query builder as a nested having to the query builder.\n *\n * @param \\Illuminate\\Database\\Query\\Builder $query\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function addNestedHavingQuery($query, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addNestedHavingQuery($query, $boolean);\n }\n\n /**\n * Add a \"having null\" clause to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNull($columns, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNull($columns, $boolean, $not);\n }\n\n /**\n * Add an \"or having null\" clause to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingNull($column);\n }\n\n /**\n * Add a \"having not null\" clause to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingNotNull($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingNotNull($columns, $boolean);\n }\n\n /**\n * Add an \"or having not null\" clause to the query.\n *\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingNotNull($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingNotNull($column);\n }\n\n /**\n * Add a \"having between \" clause to the query.\n *\n * @param string $column\n * @param string $boolean\n * @param bool $not\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingBetween($column, $values, $boolean = 'and', $not = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingBetween($column, $values, $boolean, $not);\n }\n\n /**\n * Add a raw having clause to the query.\n *\n * @param string $sql\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function havingRaw($sql, $bindings = [], $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->havingRaw($sql, $bindings, $boolean);\n }\n\n /**\n * Add a raw or having clause to the query.\n *\n * @param string $sql\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orHavingRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orHavingRaw($sql, $bindings);\n }\n\n /**\n * Add an \"order by\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @param string $direction\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function orderBy($column, $direction = 'asc')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderBy($column, $direction);\n }\n\n /**\n * Add a descending \"order by\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|\\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orderByDesc($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderByDesc($column);\n }\n\n /**\n * Put the query's results in random order.\n *\n * @param string|int $seed\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function inRandomOrder($seed = '')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->inRandomOrder($seed);\n }\n\n /**\n * Add a raw \"order by\" clause to the query.\n *\n * @param string $sql\n * @param array $bindings\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orderByRaw($sql, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orderByRaw($sql, $bindings);\n }\n\n /**\n * Alias to set the \"offset\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function skip($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->skip($value);\n }\n\n /**\n * Set the \"offset\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function offset($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->offset($value);\n }\n\n /**\n * Alias to set the \"limit\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function take($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->take($value);\n }\n\n /**\n * Set the \"limit\" value of the query.\n *\n * @param int $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function limit($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->limit($value);\n }\n\n /**\n * Add a \"group limit\" clause to the query.\n *\n * @param int $value\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function groupLimit($value, $column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->groupLimit($value, $column);\n }\n\n /**\n * Set the limit and offset for a given page.\n *\n * @param int $page\n * @param int $perPage\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPage($page, $perPage = 15)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPage($page, $perPage);\n }\n\n /**\n * Constrain the query to the previous \"page\" of results before a given ID.\n *\n * @param int $perPage\n * @param int|null $lastId\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPageBeforeId($perPage = 15, $lastId = 0, $column = 'id')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPageBeforeId($perPage, $lastId, $column);\n }\n\n /**\n * Constrain the query to the next \"page\" of results after a given ID.\n *\n * @param int $perPage\n * @param int|null $lastId\n * @param string $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function forPageAfterId($perPage = 15, $lastId = 0, $column = 'id')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->forPageAfterId($perPage, $lastId, $column);\n }\n\n /**\n * Remove all existing orders and optionally add a new order.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $column\n * @param string $direction\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function reorder($column = null, $direction = 'asc')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->reorder($column, $direction);\n }\n\n /**\n * Add descending \"reorder\" clause to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Contracts\\Database\\Query\\Expression|string|null $column\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function reorderDesc($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->reorderDesc($column);\n }\n\n /**\n * Add a union statement to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $query\n * @param bool $all\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function union($query, $all = false)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->union($query, $all);\n }\n\n /**\n * Add a union all statement to the query.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*> $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function unionAll($query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->unionAll($query);\n }\n\n /**\n * Lock the selected rows in the table.\n *\n * @param string|bool $value\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function lock($value = true)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->lock($value);\n }\n\n /**\n * Lock the selected rows in the table for updating.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function lockForUpdate()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->lockForUpdate();\n }\n\n /**\n * Share lock the selected rows in the table.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function sharedLock()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->sharedLock();\n }\n\n /**\n * Register a closure to be invoked before the query is executed.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function beforeQuery($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->beforeQuery($callback);\n }\n\n /**\n * Invoke the \"before query\" modification callbacks.\n *\n * @return void\n * @static\n */\n public static function applyBeforeQueryCallbacks()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n $instance->applyBeforeQueryCallbacks();\n }\n\n /**\n * Get the SQL representation of the query.\n *\n * @return string\n * @static\n */\n public static function toSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->toSql();\n }\n\n /**\n * Get the raw SQL representation of the query with embedded bindings.\n *\n * @return string\n * @static\n */\n public static function toRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->toRawSql();\n }\n\n /**\n * Get a single expression value from the first result of a query.\n *\n * @return mixed\n * @static\n */\n public static function rawValue($expression, $bindings = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->rawValue($expression, $bindings);\n }\n\n /**\n * Get the count of the total records for the paginator.\n *\n * @param array<string|\\Illuminate\\Contracts\\Database\\Query\\Expression> $columns\n * @return int<0, max>\n * @static\n */\n public static function getCountForPagination($columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getCountForPagination($columns);\n }\n\n /**\n * Concatenate values of a given column as a string.\n *\n * @param string $column\n * @param string $glue\n * @return string\n * @static\n */\n public static function implode($column, $glue = '')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->implode($column, $glue);\n }\n\n /**\n * Determine if any rows exist for the current query.\n *\n * @return bool\n * @static\n */\n public static function exists()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->exists();\n }\n\n /**\n * Determine if no rows exist for the current query.\n *\n * @return bool\n * @static\n */\n public static function doesntExist()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->doesntExist();\n }\n\n /**\n * Execute the given callback if no rows exist for the current query.\n *\n * @return mixed\n * @static\n */\n public static function existsOr($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->existsOr($callback);\n }\n\n /**\n * Execute the given callback if rows exist for the current query.\n *\n * @return mixed\n * @static\n */\n public static function doesntExistOr($callback)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->doesntExistOr($callback);\n }\n\n /**\n * Retrieve the \"count\" result of the query.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $columns\n * @return int<0, max>\n * @static\n */\n public static function count($columns = '*')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->count($columns);\n }\n\n /**\n * Retrieve the minimum value of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function min($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->min($column);\n }\n\n /**\n * Retrieve the maximum value of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function max($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->max($column);\n }\n\n /**\n * Retrieve the sum of the values of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function sum($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->sum($column);\n }\n\n /**\n * Retrieve the average of the values of a given column.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function avg($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->avg($column);\n }\n\n /**\n * Alias for the \"avg\" method.\n *\n * @param \\Illuminate\\Contracts\\Database\\Query\\Expression|string $column\n * @return mixed\n * @static\n */\n public static function average($column)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->average($column);\n }\n\n /**\n * Execute an aggregate function on the database.\n *\n * @param string $function\n * @param array $columns\n * @return mixed\n * @static\n */\n public static function aggregate($function, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->aggregate($function, $columns);\n }\n\n /**\n * Execute a numeric aggregate function on the database.\n *\n * @param string $function\n * @param array $columns\n * @return float|int\n * @static\n */\n public static function numericAggregate($function, $columns = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->numericAggregate($function, $columns);\n }\n\n /**\n * Insert new records into the database.\n *\n * @return bool\n * @static\n */\n public static function insert($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insert($values);\n }\n\n /**\n * Insert new records into the database while ignoring errors.\n *\n * @return int<0, max>\n * @static\n */\n public static function insertOrIgnore($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertOrIgnore($values);\n }\n\n /**\n * Insert a new record and get the value of the primary key.\n *\n * @param string|null $sequence\n * @return int\n * @static\n */\n public static function insertGetId($values, $sequence = null)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertGetId($values, $sequence);\n }\n\n /**\n * Insert new records into the table using a subquery.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return int\n * @static\n */\n public static function insertUsing($columns, $query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertUsing($columns, $query);\n }\n\n /**\n * Insert new records into the table using a subquery while ignoring errors.\n *\n * @param \\Closure|\\Illuminate\\Database\\Query\\Builder|\\Illuminate\\Database\\Eloquent\\Builder<*>|string $query\n * @return int\n * @static\n */\n public static function insertOrIgnoreUsing($columns, $query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->insertOrIgnoreUsing($columns, $query);\n }\n\n /**\n * Update records in a PostgreSQL database using the update from syntax.\n *\n * @return int\n * @static\n */\n public static function updateFrom($values)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->updateFrom($values);\n }\n\n /**\n * Insert or update a record matching the attributes, and fill it with values.\n *\n * @return bool\n * @static\n */\n public static function updateOrInsert($attributes, $values = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->updateOrInsert($attributes, $values);\n }\n\n /**\n * Increment the given column's values by the given amounts.\n *\n * @param array<string, float|int|numeric-string> $columns\n * @param array<string, mixed> $extra\n * @return int<0, max>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function incrementEach($columns, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->incrementEach($columns, $extra);\n }\n\n /**\n * Decrement the given column's values by the given amounts.\n *\n * @param array<string, float|int|numeric-string> $columns\n * @param array<string, mixed> $extra\n * @return int<0, max>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function decrementEach($columns, $extra = [])\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->decrementEach($columns, $extra);\n }\n\n /**\n * Run a truncate statement on the table.\n *\n * @return void\n * @static\n */\n public static function truncate()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n $instance->truncate();\n }\n\n /**\n * Get all of the query builder's columns in a text-only array with all expressions evaluated.\n *\n * @return list<string>\n * @static\n */\n public static function getColumns()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getColumns();\n }\n\n /**\n * Create a raw database expression.\n *\n * @param mixed $value\n * @return \\Illuminate\\Contracts\\Database\\Query\\Expression\n * @static\n */\n public static function raw($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->raw($value);\n }\n\n /**\n * Get the current query value bindings in a flattened array.\n *\n * @return list<mixed>\n * @static\n */\n public static function getBindings()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getBindings();\n }\n\n /**\n * Get the raw array of bindings.\n *\n * @return \\Illuminate\\Database\\Query\\array{ select: list<mixed>,\n * from: list<mixed>,\n * join: list<mixed>,\n * where: list<mixed>,\n * groupBy: list<mixed>,\n * having: list<mixed>,\n * order: list<mixed>,\n * union: list<mixed>,\n * unionOrder: list<mixed>,\n * }\n * @static\n */\n public static function getRawBindings()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getRawBindings();\n }\n\n /**\n * Set the bindings on the query builder.\n *\n * @param list<mixed> $bindings\n * @param \"select\"|\"from\"|\"join\"|\"where\"|\"groupBy\"|\"having\"|\"order\"|\"union\"|\"unionOrder\" $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function setBindings($bindings, $type = 'where')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->setBindings($bindings, $type);\n }\n\n /**\n * Add a binding to the query.\n *\n * @param mixed $value\n * @param \"select\"|\"from\"|\"join\"|\"where\"|\"groupBy\"|\"having\"|\"order\"|\"union\"|\"unionOrder\" $type\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @throws \\InvalidArgumentException\n * @static\n */\n public static function addBinding($value, $type = 'where')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->addBinding($value, $type);\n }\n\n /**\n * Cast the given binding value.\n *\n * @param mixed $value\n * @return mixed\n * @static\n */\n public static function castBinding($value)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->castBinding($value);\n }\n\n /**\n * Merge an array of bindings into our bindings.\n *\n * @param self $query\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function mergeBindings($query)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->mergeBindings($query);\n }\n\n /**\n * Remove all of the expressions from a list of bindings.\n *\n * @param array<mixed> $bindings\n * @return list<mixed>\n * @static\n */\n public static function cleanBindings($bindings)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cleanBindings($bindings);\n }\n\n /**\n * Get the database query processor instance.\n *\n * @return \\Illuminate\\Database\\Query\\Processors\\Processor\n * @static\n */\n public static function getProcessor()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getProcessor();\n }\n\n /**\n * Get the query grammar instance.\n *\n * @return \\Illuminate\\Database\\Query\\Grammars\\Grammar\n * @static\n */\n public static function getGrammar()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->getGrammar();\n }\n\n /**\n * Use the \"write\" PDO connection when executing the query.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function useWritePdo()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->useWritePdo();\n }\n\n /**\n * Clone the query without the given properties.\n *\n * @return static\n * @static\n */\n public static function cloneWithout($properties)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cloneWithout($properties);\n }\n\n /**\n * Clone the query without the given bindings.\n *\n * @return static\n * @static\n */\n public static function cloneWithoutBindings($except)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->cloneWithoutBindings($except);\n }\n\n /**\n * Dump the current SQL and bindings.\n *\n * @param mixed $args\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dump(...$args)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dump(...$args);\n }\n\n /**\n * Dump the raw current SQL with embedded bindings.\n *\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function dumpRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dumpRawSql();\n }\n\n /**\n * Die and dump the current SQL and bindings.\n *\n * @return never\n * @static\n */\n public static function dd()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->dd();\n }\n\n /**\n * Die and dump the current SQL with embedded bindings.\n *\n * @return never\n * @static\n */\n public static function ddRawSql()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->ddRawSql();\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function wherePast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->wherePast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNowOrPast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNowOrPast($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the past to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWherePast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWherePast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the past or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNowOrPast($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNowOrPast($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the future to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereFuture($columns);\n }\n\n /**\n * Add a where clause to determine if a \"date\" column is in the future or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereNowOrFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereNowOrFuture($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the future to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereFuture($columns);\n }\n\n /**\n * Add an \"or where\" clause to determine if a \"date\" column is in the future or now to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereNowOrFuture($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereNowOrFuture($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today to the query.\n *\n * @param array|string $columns\n * @param string $boolean\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereToday($columns, $boolean = 'and')\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereToday($columns, $boolean);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is before today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereBeforeToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereBeforeToday($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today or before to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTodayOrBefore($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTodayOrBefore($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is after today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereAfterToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereAfterToday($columns);\n }\n\n /**\n * Add a \"where date\" clause to determine if a \"date\" column is today or after to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function whereTodayOrAfter($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->whereTodayOrAfter($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is before today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereBeforeToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereBeforeToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today or before to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTodayOrBefore($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTodayOrBefore($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is after today.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereAfterToday($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereAfterToday($columns);\n }\n\n /**\n * Add an \"or where date\" clause to determine if a \"date\" column is today or after to the query.\n *\n * @param array|string $columns\n * @return \\Illuminate\\Database\\Eloquent\\Builder<static>\n * @static\n */\n public static function orWhereTodayOrAfter($columns)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->orWhereTodayOrAfter($columns);\n }\n\n /**\n * Explains the query.\n *\n * @return \\Illuminate\\Support\\Collection\n * @static\n */\n public static function explain()\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->explain();\n }\n\n /**\n * Register a custom macro.\n *\n * @param string $name\n * @param object|callable $macro\n * @param-closure-this static $macro\n * @return void\n * @static\n */\n public static function macro($name, $macro)\n {\n \\Illuminate\\Database\\Query\\Builder::macro($name, $macro);\n }\n\n /**\n * Mix another object into the class.\n *\n * @param object $mixin\n * @param bool $replace\n * @return void\n * @throws \\ReflectionException\n * @static\n */\n public static function mixin($mixin, $replace = true)\n {\n \\Illuminate\\Database\\Query\\Builder::mixin($mixin, $replace);\n }\n\n /**\n * Flush the existing macros.\n *\n * @return void\n * @static\n */\n public static function flushMacros()\n {\n \\Illuminate\\Database\\Query\\Builder::flushMacros();\n }\n\n /**\n * Dynamically handle calls to the class.\n *\n * @param string $method\n * @param array $parameters\n * @return mixed\n * @throws \\BadMethodCallException\n * @static\n */\n public static function macroCall($method, $parameters)\n {\n /** @var \\Illuminate\\Database\\Query\\Builder $instance */\n return $instance->macroCall($method, $parameters);\n }\n\n}\n class Event extends \\Illuminate\\Support\\Facades\\Event {}\n class File extends \\Illuminate\\Support\\Facades\\File {}\n class Gate extends \\Illuminate\\Support\\Facades\\Gate {}\n class Hash extends \\Illuminate\\Support\\Facades\\Hash {}\n class Http extends \\Illuminate\\Support\\Facades\\Http {}\n class Js extends \\Illuminate\\Support\\Js {}\n class Lang extends \\Illuminate\\Support\\Facades\\Lang {}\n class Log extends \\Illuminate\\Support\\Facades\\Log {}\n class Mail extends \\Illuminate\\Support\\Facades\\Mail {}\n class Notification extends \\Illuminate\\Support\\Facades\\Notification {}\n class Number extends \\Illuminate\\Support\\Number {}\n class Password extends \\Illuminate\\Support\\Facades\\Password {}\n class Process extends \\Illuminate\\Support\\Facades\\Process {}\n class Queue extends \\Illuminate\\Support\\Facades\\Queue {}\n class RateLimiter extends \\Illuminate\\Support\\Facades\\RateLimiter {}\n class Redirect extends \\Illuminate\\Support\\Facades\\Redirect {}\n class Request extends \\Illuminate\\Support\\Facades\\Request {}\n class Response extends \\Illuminate\\Support\\Facades\\Response {}\n class Route extends \\Illuminate\\Support\\Facades\\Route {}\n class Schedule extends \\Illuminate\\Support\\Facades\\Schedule {}\n class Schema extends \\Illuminate\\Support\\Facades\\Schema {}\n class Session extends \\Illuminate\\Support\\Facades\\Session {}\n class Storage extends \\Illuminate\\Support\\Facades\\Storage {}\n class Str extends \\Illuminate\\Support\\Str {}\n class Uri extends \\Illuminate\\Support\\Uri {}\n class URL extends \\Illuminate\\Support\\Facades\\URL {}\n class Validator extends \\Illuminate\\Support\\Facades\\Validator {}\n class View extends \\Illuminate\\Support\\Facades\\View {}\n class Vite extends \\Illuminate\\Support\\Facades\\Vite {}\n class AWS extends \\Aws\\Laravel\\AwsFacade {}\n class Avatar extends \\Laravolt\\Avatar\\Facade {}\n class Fractal extends \\Spatie\\Fractal\\Facades\\Fractal {}\n class Laratrust extends \\Laratrust\\LaratrustFacade {}\n class RedisManager extends \\Illuminate\\Support\\Facades\\Redis {}\n class Sentry extends \\Sentry\\Laravel\\Facade {}\n class Statsd extends \\League\\StatsD\\Laravel5\\Facade\\StatsdFacade {}\n class Debugbar extends \\Barryvdh\\Debugbar\\Facades\\Debugbar {}\n class PDF extends \\Barryvdh\\DomPDF\\Facade\\Pdf {}\n class Pdf extends \\Barryvdh\\DomPDF\\Facade\\Pdf {}\n class Datadog extends \\ChaseConey\\LaravelDatadogHelper\\Datadog {}\n class Flare extends \\Spatie\\LaravelIgnition\\Facades\\Flare {}\n class Hashids extends \\Vinkla\\Hashids\\Facades\\Hashids {}\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6908084031734223470
|
-4461000910654451772
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Built-in Preview
Chrome
Firefox
Safari
Sync Changes
Hide This Notification
Code changed:
Hide
Analyzing…
<?php
/* @noinspection ALL */
// @formatter:off
// phpcs:ignoreFile
/**
* A helper file for Laravel, to provide autocomplete information to your IDE
* Generated for Laravel 12.33.0.
*
* This file should not be included in your code, only analyzed by your IDE!
*
* @author Barry vd. Heuvel <[EMAIL]>
* @see [URL_WITH_CREDENTIALS] string
* @static
*/
public static function inferBasePath()
{
return \Illuminate\Foundation\Application::inferBasePath();
}
/**
* Get the version number of the application.
*
* @return string
* @static
*/
public static function version()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->version();
}
/**
* Run the given array of bootstrap classes.
*
* @param string[] $bootstrappers
* @return void
* @static
*/
public static function bootstrapWith($bootstrappers)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->bootstrapWith($bootstrappers);
}
/**
* Register a callback to run after loading the environment.
*
* @param \Closure $callback
* @return void
* @static
*/
public static function afterLoadingEnvironment($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->afterLoadingEnvironment($callback);
}
/**
* Register a callback to run before a bootstrapper.
*
* @param string $bootstrapper
* @param \Closure $callback
* @return void
* @static
*/
public static function beforeBootstrapping($bootstrapper, $callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->beforeBootstrapping($bootstrapper, $callback);
}
/**
* Register a callback to run after a bootstrapper.
*
* @param string $bootstrapper
* @param \Closure $callback
* @return void
* @static
*/
public static function afterBootstrapping($bootstrapper, $callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->afterBootstrapping($bootstrapper, $callback);
}
/**
* Determine if the application has been bootstrapped before.
*
* @return bool
* @static
*/
public static function hasBeenBootstrapped()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasBeenBootstrapped();
}
/**
* Set the base path for the application.
*
* @param string $basePath
* @return \Illuminate\Foundation\Application
* @static
*/
public static function setBasePath($basePath)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->setBasePath($basePath);
}
/**
* Get the path to the application "app" directory.
*
* @param string $path
* @return string
* @static
*/
public static function path($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->path($path);
}
/**
* Set the application directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useAppPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useAppPath($path);
}
/**
* Get the base path of the Laravel installation.
*
* @param string $path
* @return string
* @static
*/
public static function basePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->basePath($path);
}
/**
* Get the path to the bootstrap directory.
*
* @param string $path
* @return string
* @static
*/
public static function bootstrapPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->bootstrapPath($path);
}
/**
* Get the path to the service provider list in the bootstrap directory.
*
* @return string
* @static
*/
public static function getBootstrapProvidersPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getBootstrapProvidersPath();
}
/**
* Set the bootstrap file directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useBootstrapPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useBootstrapPath($path);
}
/**
* Get the path to the application configuration files.
*
* @param string $path
* @return string
* @static
*/
public static function configPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->configPath($path);
}
/**
* Set the configuration directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useConfigPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useConfigPath($path);
}
/**
* Get the path to the database directory.
*
* @param string $path
* @return string
* @static
*/
public static function databasePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->databasePath($path);
}
/**
* Set the database directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useDatabasePath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useDatabasePath($path);
}
/**
* Get the path to the language files.
*
* @param string $path
* @return string
* @static
*/
public static function langPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->langPath($path);
}
/**
* Set the language file directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useLangPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useLangPath($path);
}
/**
* Get the path to the public / web directory.
*
* @param string $path
* @return string
* @static
*/
public static function publicPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->publicPath($path);
}
/**
* Set the public / web directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function usePublicPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->usePublicPath($path);
}
/**
* Get the path to the storage directory.
*
* @param string $path
* @return string
* @static
*/
public static function storagePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->storagePath($path);
}
/**
* Set the storage directory.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useStoragePath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useStoragePath($path);
}
/**
* Get the path to the resources directory.
*
* @param string $path
* @return string
* @static
*/
public static function resourcePath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resourcePath($path);
}
/**
* Get the path to the views directory.
*
* This method returns the first configured path in the array of view paths.
*
* @param string $path
* @return string
* @static
*/
public static function viewPath($path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->viewPath($path);
}
/**
* Join the given paths together.
*
* @param string $basePath
* @param string $path
* @return string
* @static
*/
public static function joinPaths($basePath, $path = '')
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->joinPaths($basePath, $path);
}
/**
* Get the path to the environment file directory.
*
* @return string
* @static
*/
public static function environmentPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentPath();
}
/**
* Set the directory for the environment file.
*
* @param string $path
* @return \Illuminate\Foundation\Application
* @static
*/
public static function useEnvironmentPath($path)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->useEnvironmentPath($path);
}
/**
* Set the environment file to be loaded during bootstrapping.
*
* @param string $file
* @return \Illuminate\Foundation\Application
* @static
*/
public static function loadEnvironmentFrom($file)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->loadEnvironmentFrom($file);
}
/**
* Get the environment file the application is using.
*
* @return string
* @static
*/
public static function environmentFile()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentFile();
}
/**
* Get the fully qualified path to the environment file.
*
* @return string
* @static
*/
public static function environmentFilePath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environmentFilePath();
}
/**
* Get or check the current application environment.
*
* @param string|array $environments
* @return string|bool
* @static
*/
public static function environment(...$environments)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->environment(...$environments);
}
/**
* Determine if the application is in the local environment.
*
* @return bool
* @static
*/
public static function isLocal()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isLocal();
}
/**
* Determine if the application is in the production environment.
*
* @return bool
* @static
*/
public static function isProduction()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isProduction();
}
/**
* Detect the application's current environment.
*
* @param \Closure $callback
* @return string
* @static
*/
public static function detectEnvironment($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->detectEnvironment($callback);
}
/**
* Determine if the application is running in the console.
*
* @return bool
* @static
*/
public static function runningInConsole()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningInConsole();
}
/**
* Determine if the application is running any of the given console commands.
*
* @param string|array $commands
* @return bool
* @static
*/
public static function runningConsoleCommand(...$commands)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningConsoleCommand(...$commands);
}
/**
* Determine if the application is running unit tests.
*
* @return bool
* @static
*/
public static function runningUnitTests()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->runningUnitTests();
}
/**
* Determine if the application is running with debug mode enabled.
*
* @return bool
* @static
*/
public static function hasDebugModeEnabled()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasDebugModeEnabled();
}
/**
* Register a new registered listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function registered($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registered($callback);
}
/**
* Register all of the configured providers.
*
* @return void
* @static
*/
public static function registerConfiguredProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerConfiguredProviders();
}
/**
* Register a service provider with the application.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @param bool $force
* @return \Illuminate\Support\ServiceProvider
* @static
*/
public static function register($provider, $force = false)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->register($provider, $force);
}
/**
* Get the registered service provider instance if it exists.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @return \Illuminate\Support\ServiceProvider|null
* @static
*/
public static function getProvider($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getProvider($provider);
}
/**
* Get the registered service provider instances if any exist.
*
* @param \Illuminate\Support\ServiceProvider|string $provider
* @return array
* @static
*/
public static function getProviders($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getProviders($provider);
}
/**
* Resolve a service provider instance from the class name.
*
* @param string $provider
* @return \Illuminate\Support\ServiceProvider
* @static
*/
public static function resolveProvider($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resolveProvider($provider);
}
/**
* Load and boot all of the remaining deferred providers.
*
* @return void
* @static
*/
public static function loadDeferredProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->loadDeferredProviders();
}
/**
* Load the provider for a deferred service.
*
* @param string $service
* @return void
* @static
*/
public static function loadDeferredProvider($service)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->loadDeferredProvider($service);
}
/**
* Register a deferred provider and service.
*
* @param string $provider
* @param string|null $service
* @return void
* @static
*/
public static function registerDeferredProvider($provider, $service = null)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerDeferredProvider($provider, $service);
}
/**
* Resolve the given type from the container.
*
* @template TClass of object
* @param string|class-string<TClass> $abstract
* @param array $parameters
* @return ($abstract is class-string<TClass> ? TClass : mixed)
* @throws \Illuminate\Contracts\Container\BindingResolutionException
* @static
*/
public static function make($abstract, $parameters = [])
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->make($abstract, $parameters);
}
/**
* Determine if the given abstract type has been bound.
*
* @param string $abstract
* @return bool
* @static
*/
public static function bound($abstract)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->bound($abstract);
}
/**
* Determine if the application has booted.
*
* @return bool
* @static
*/
public static function isBooted()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isBooted();
}
/**
* Boot the application's service providers.
*
* @return void
* @static
*/
public static function boot()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->boot();
}
/**
* Register a new boot listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function booting($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->booting($callback);
}
/**
* Register a new "booted" listener.
*
* @param callable $callback
* @return void
* @static
*/
public static function booted($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->booted($callback);
}
/**
* {@inheritdoc}
*
* @return \Symfony\Component\HttpFoundation\Response
* @static
*/
public static function handle($request, $type = 1, $catch = true)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->handle($request, $type, $catch);
}
/**
* Handle the incoming HTTP request and send the response to the browser.
*
* @param \Illuminate\Http\Request $request
* @return void
* @static
*/
public static function handleRequest($request)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->handleRequest($request);
}
/**
* Handle the incoming Artisan command.
*
* @param \Symfony\Component\Console\Input\InputInterface $input
* @return int
* @static
*/
public static function handleCommand($input)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->handleCommand($input);
}
/**
* Determine if the framework's base configuration should be merged.
*
* @return bool
* @static
*/
public static function shouldMergeFrameworkConfiguration()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->shouldMergeFrameworkConfiguration();
}
/**
* Indicate that the framework's base configuration should not be merged.
*
* @return \Illuminate\Foundation\Application
* @static
*/
public static function dontMergeFrameworkConfiguration()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->dontMergeFrameworkConfiguration();
}
/**
* Determine if middleware has been disabled for the application.
*
* @return bool
* @static
*/
public static function shouldSkipMiddleware()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->shouldSkipMiddleware();
}
/**
* Get the path to the cached services.php file.
*
* @return string
* @static
*/
public static function getCachedServicesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedServicesPath();
}
/**
* Get the path to the cached packages.php file.
*
* @return string
* @static
*/
public static function getCachedPackagesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedPackagesPath();
}
/**
* Determine if the application configuration is cached.
*
* @return bool
* @static
*/
public static function configurationIsCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->configurationIsCached();
}
/**
* Get the path to the configuration cache file.
*
* @return string
* @static
*/
public static function getCachedConfigPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedConfigPath();
}
/**
* Determine if the application routes are cached.
*
* @return bool
* @static
*/
public static function routesAreCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->routesAreCached();
}
/**
* Get the path to the routes cache file.
*
* @return string
* @static
*/
public static function getCachedRoutesPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedRoutesPath();
}
/**
* Determine if the application events are cached.
*
* @return bool
* @static
*/
public static function eventsAreCached()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->eventsAreCached();
}
/**
* Get the path to the events cache file.
*
* @return string
* @static
*/
public static function getCachedEventsPath()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getCachedEventsPath();
}
/**
* Add new prefix to list of absolute path prefixes.
*
* @param string $prefix
* @return \Illuminate\Foundation\Application
* @static
*/
public static function addAbsoluteCachePathPrefix($prefix)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->addAbsoluteCachePathPrefix($prefix);
}
/**
* Get an instance of the maintenance mode manager implementation.
*
* @return \Illuminate\Contracts\Foundation\MaintenanceMode
* @static
*/
public static function maintenanceMode()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->maintenanceMode();
}
/**
* Determine if the application is currently down for maintenance.
*
* @return bool
* @static
*/
public static function isDownForMaintenance()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isDownForMaintenance();
}
/**
* Throw an HttpException with the given data.
*
* @param int $code
* @param string $message
* @param array $headers
* @return never
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @static
*/
public static function abort($code, $message = '', $headers = [])
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->abort($code, $message, $headers);
}
/**
* Register a terminating callback with the application.
*
* @param callable|string $callback
* @return \Illuminate\Foundation\Application
* @static
*/
public static function terminating($callback)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->terminating($callback);
}
/**
* Terminate the application.
*
* @return void
* @static
*/
public static function terminate()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->terminate();
}
/**
* Get the service providers that have been loaded.
*
* @return array<string, bool>
* @static
*/
public static function getLoadedProviders()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getLoadedProviders();
}
/**
* Determine if the given service provider is loaded.
*
* @param string $provider
* @return bool
* @static
*/
public static function providerIsLoaded($provider)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->providerIsLoaded($provider);
}
/**
* Get the application's deferred services.
*
* @return array
* @static
*/
public static function getDeferredServices()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getDeferredServices();
}
/**
* Set the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function setDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setDeferredServices($services);
}
/**
* Determine if the given service is a deferred service.
*
* @param string $service
* @return bool
* @static
*/
public static function isDeferredService($service)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isDeferredService($service);
}
/**
* Add an array of services to the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function addDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->addDeferredServices($services);
}
/**
* Remove an array of services from the application's deferred services.
*
* @param array $services
* @return void
* @static
*/
public static function removeDeferredServices($services)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->removeDeferredServices($services);
}
/**
* Configure the real-time facade namespace.
*
* @param string $namespace
* @return void
* @static
*/
public static function provideFacades($namespace)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->provideFacades($namespace);
}
/**
* Get the current application locale.
*
* @return string
* @static
*/
public static function getLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getLocale();
}
/**
* Get the current application locale.
*
* @return string
* @static
*/
public static function currentLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->currentLocale();
}
/**
* Get the current application fallback locale.
*
* @return string
* @static
*/
public static function getFallbackLocale()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getFallbackLocale();
}
/**
* Set the current application locale.
*
* @param string $locale
* @return void
* @static
*/
public static function setLocale($locale)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setLocale($locale);
}
/**
* Set the current application fallback locale.
*
* @param string $fallbackLocale
* @return void
* @static
*/
public static function setFallbackLocale($fallbackLocale)
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->setFallbackLocale($fallbackLocale);
}
/**
* Determine if the application locale is the given locale.
*
* @param string $locale
* @return bool
* @static
*/
public static function isLocale($locale)
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isLocale($locale);
}
/**
* Register the core class aliases in the container.
*
* @return void
* @static
*/
public static function registerCoreContainerAliases()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->registerCoreContainerAliases();
}
/**
* Flush the container of all bindings and resolved instances.
*
* @return void
* @static
*/
public static function flush()
{
/** @var \Illuminate\Foundation\Application $instance */
$instance->flush();
}
/**
* Get the application namespace.
*
* @return string
* @throws \RuntimeException
* @static
*/
public static function getNamespace()
{
/** @var \Illuminate\Foundation\Application $instance */
return $instance->getNamespace();
}
/**
* Define a contextual binding.
*
* @param array|string $concrete
* @return \Illuminate\Contracts\Container\ContextualBindingBuilder
* @static
*/
public static function when($concrete)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->when($concrete);
}
/**
* Define a contextual binding based on an attribute.
*
* @param string $attribute
* @param \Closure $handler
* @return void
* @static
*/
public static function whenHasAttribute($attribute, $handler)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->whenHasAttribute($attribute, $handler);
}
/**
* Returns true if the container can return an entry for the given identifier.
*
* Returns false otherwise.
*
* `has($id)` returning true does not mean that `get($id)` will not throw an exception.
* It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
*
* @return bool
* @param string $id Identifier of the entry to look for.
* @return bool
* @static
*/
public static function has($id)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->has($id);
}
/**
* Determine if the given abstract type has been resolved.
*
* @param string $abstract
* @return bool
* @static
*/
public static function resolved($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->resolved($abstract);
}
/**
* Determine if a given type is shared.
*
* @param string $abstract
* @return bool
* @static
*/
public static function isShared($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isShared($abstract);
}
/**
* Determine if a given string is an alias.
*
* @param string $name
* @return bool
* @static
*/
public static function isAlias($name)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->isAlias($name);
}
/**
* Register a binding with the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
* @throws \TypeError
* @throws ReflectionException
* @static
*/
public static function bind($abstract, $concrete = null, $shared = false)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bind($abstract, $concrete, $shared);
}
/**
* Determine if the container has a method binding.
*
* @param string $method
* @return bool
* @static
*/
public static function hasMethodBinding($method)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->hasMethodBinding($method);
}
/**
* Bind a callback to resolve with Container::call.
*
* @param array|string $method
* @param \Closure $callback
* @return void
* @static
*/
public static function bindMethod($method, $callback)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bindMethod($method, $callback);
}
/**
* Get the method binding for the given method.
*
* @param string $method
* @param mixed $instance
* @return mixed
* @static
*/
public static function callMethodBinding($method, $instance)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->callMethodBinding($method, $instance);
}
/**
* Add a contextual binding to the container.
*
* @param string $concrete
* @param \Closure|string $abstract
* @param \Closure|string $implementation
* @return void
* @static
*/
public static function addContextualBinding($concrete, $abstract, $implementation)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->addContextualBinding($concrete, $abstract, $implementation);
}
/**
* Register a binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
* @static
*/
public static function bindIf($abstract, $concrete = null, $shared = false)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->bindIf($abstract, $concrete, $shared);
}
/**
* Register a shared binding in the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function singleton($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->singleton($abstract, $concrete);
}
/**
* Register a shared binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function singletonIf($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->singletonIf($abstract, $concrete);
}
/**
* Register a scoped binding in the container.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function scoped($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->scoped($abstract, $concrete);
}
/**
* Register a scoped binding if it hasn't already been registered.
*
* @param \Closure|string $abstract
* @param \Closure|string|null $concrete
* @return void
* @static
*/
public static function scopedIf($abstract, $concrete = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->scopedIf($abstract, $concrete);
}
/**
* "Extend" an abstract type in the container.
*
* @param string $abstract
* @param \Closure $closure
* @return void
* @throws \InvalidArgumentException
* @static
*/
public static function extend($abstract, $closure)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->extend($abstract, $closure);
}
/**
* Register an existing instance as shared in the container.
*
* @template TInstance of mixed
* @param string $abstract
* @param TInstance $instance
* @return TInstance
* @static
*/
public static function instance($abstract, $instance)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->instance($abstract, $instance);
}
/**
* Assign a set of tags to a given binding.
*
* @param array|string $abstracts
* @param mixed $tags
* @return void
* @static
*/
public static function tag($abstracts, $tags)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->tag($abstracts, $tags);
}
/**
* Resolve all of the bindings for a given tag.
*
* @param string $tag
* @return iterable
* @static
*/
public static function tagged($tag)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->tagged($tag);
}
/**
* Alias a type to a different name.
*
* @param string $abstract
* @param string $alias
* @return void
* @throws \LogicException
* @static
*/
public static function alias($abstract, $alias)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
$instance->alias($abstract, $alias);
}
/**
* Bind a new callback to an abstract's rebind event.
*
* @param string $abstract
* @param \Closure $callback
* @return mixed
* @static
*/
public static function rebinding($abstract, $callback)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->rebinding($abstract, $callback);
}
/**
* Refresh an instance on the given target and method.
*
* @param string $abstract
* @param mixed $target
* @param string $method
* @return mixed
* @static
*/
public static function refresh($abstract, $target, $method)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->refresh($abstract, $target, $method);
}
/**
* Wrap the given closure such that its dependencies will be injected when executed.
*
* @param \Closure $callback
* @param array $parameters
* @return \Closure
* @static
*/
public static function wrap($callback, $parameters = [])
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->wrap($callback, $parameters);
}
/**
* Call the given Closure / class@method and inject its dependencies.
*
* @param callable|string $callback
* @param array<string, mixed> $parameters
* @param string|null $defaultMethod
* @return mixed
* @throws \InvalidArgumentException
* @static
*/
public static function call($callback, $parameters = [], $defaultMethod = null)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->call($callback, $parameters, $defaultMethod);
}
/**
* Get a closure to resolve the given type from the container.
*
* @template TClass of object
* @param string|class-string<TClass> $abstract
* @return ($abstract is class-string<TClass> ? \Closure(): TClass : \Closure(): mixed)
* @static
*/
public static function factory($abstract)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->factory($abstract);
}
/**
* An alias function name for make().
*
* @template TClass of object
* @param string|class-string<TClass>|callable $abstract
* @param array $parameters
* @return ($abstract is class-string<TClass> ? TClass : mixed)
* @throws \Illuminate\Contracts\Container\BindingResolutionException
* @static
*/
public static function makeWith($abstract, $parameters = [])
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $instance */
return $instance->makeWith($abstract, $parameters);
}
/**
* {@inheritdoc}
*
* @template TClass of object
* @param string|class-string<TClass> $id
* @return ($id is class-string<TClass> ? TClass : mixed)
* @static
*/
public static function get($id)
{
//Method inherited from \Illuminate\Container\Container
/** @var \Illuminate\Foundation\Application $i...
|
16364
|
NULL
|
NULL
|
NULL
|
|
16366
|
735
|
12
|
2026-05-11T08:46:37.019892+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489197019_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Cache;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"65","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Cache::put($cacheKey, $retryAfter, $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Cache::put($cacheKey, $retryAfter, $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5820598605403137505
|
6378616412348221796
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Cache;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16367
|
735
|
13
|
2026-05-11T08:46:55.163362+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489215163_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Cache;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"65","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Cache::put($cacheKey, $retryAfter, $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Cache::put($cacheKey, $retryAfter, $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7220615986847313571
|
6378616412348221796
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Cache;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16366
|
NULL
|
NULL
|
NULL
|
|
16369
|
735
|
14
|
2026-05-11T08:46:58.626417+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489218626_m2.jpg...
|
PhpStorm
|
faVsco.js – HubspotPaginationService.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5641617897080429754
|
-8160223333407913180
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-linProiect© SyncRelatedActivityManager.php© BatchSyncCollectolyhuospotsynestrategybase.onp© ProspectCache.phpe balchsynckealsseo closedDealstagess* RateLimitexcDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) ProviderRateLimiter.phpC) PaqinationConfia.phpC) FieldT vpeconverteclass Cuient extends Baseclient imolements Hubspotc ientinterfacee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectnP ResponseNormalizec) Service.onrC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM AcceccorsConfigD DTO• M SiltersJobs• M ProcnectSoarchStr.W service Iralts© DataClient.php© DecorateActivity.ph(e) LocalSearch.onp• LocalSearchInterfa© RemoteSearch.phpc) Service.phpv W Listeners© ConvertLeadActivitc) PurceLookuocachel> M Metadata> Miarationia Pioedrive311v Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.) M ServiceTraitcC) Client nhr@ DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpnublic functiongetOpportunityByld(string Scrmid, array $fields): arrayif (! Sdeal instanceof DealWithAssociations) {"Deal not found')»'1d => Sdeall->detiido.oroperties' => Sdeal->aetPronertiesoassociations' => Sdeal->aetAssociationsoGenenic hatch nend method fon HuhSnot nbiects* @param string $objectType The object type ("deals',"comoanzes,"contacts!)* @param array<string> ScrmIds Array of HubSpot object IDs (max 100)* @param array<string> $fields Array of property names to fetch* @return array<string, array> Array keyed by CRM ID with object datoprivate tunction batchreadubnects(strina sobnectlype, array scrmids, array Stields: arrayif (empty(ScrmIds)) {returnSthis->vaLidateBatchSize(SobiectTvpe. ScrmIds):Sthis->ensureValidtokeno:trytSbatchConfia= sthis->createBatchconfiourat.ion/Sobiecttvoe):$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmids, $fields):Sresnonse = Shatchtonfiartant:->roadlShatchReadRequest).sthic-s1oARAtikpodta tk(< v Accept File *~ X Reject File- (P8<a))• < 1 of 3 files →lelner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)MPIIШ= custom.loa XA SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console [euJ# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","CF-Cache-Status": L"DYNAMIC"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSubDomains: preload")nacceot-encodino"."access-control-allow-credentials": "false"."server-timing": ["hcid;desc=|"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3""Set-Cookip"." c+hm=Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-[IP_ADDRESS]-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545— 30=31suppont Dally • In sh 14m100% 2• Mon 11 May 11:46:58U AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re• RateLimitException.php+0 ..D Cii+7-12Now the middleware - drop DAILY_LIMIT branch, drop MIN RETRY DELAY to 1, keep jitter:• HandleHubspotRateLimit.php+3-15Now MatchActivitvermdata — collapse the two catches into one with instanceof• MatchActivityCrmData.php+8-8All changes applied. Final state:Summary of this round of changesFlleChangeReasorRateL1m1tException.phpRemoved policy tield & methodsMiddleware doesn't need it; cache TTL handles DAILY naturallyclient. php:: executeRequestcache stores scalar int retry after) instead of arraySimpler; no policy to trackClient. php::executeRequestDrop policy from RateLimitException constructorMatch new exception signature; still log policy for observabilityHandleHubspotRateLimit.phpRemoved DAILY_LIMIT branchretryUntil + long cache TTL handle it; saves complexityHandleHubspotRateLimit.phpMIN_RETRY_DELAY 5 →1Honor HinhGnotle setunl cianal. littor dooc tho hord nrotostionHandleHubspotRateLimit.phpNamed JITTER_ SECONDS constantSelf-documentingMatchActivitvGrmData.nhnCollansed dual catch into sinale catch + instancenfMore readable. no awkward emntv rethrow blockHow DAILY_LIMIT now flows (no special case needed)1. HubSpot returns 429 with nolicvlane: DATLY LTMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY LIMIT default I left in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iobs with delav 1-6s (cheap cvcles, all hit cache)6. After 20 min retrvlintil eynires @) iohs nermanent-fail naturallv7. No special branch. no siob->fail(). no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version• Job retry cycle is faster (delay 1-6s instead of 5-10s) → ~2x more queue cycles per second per worker• More cache hits per second (since cvcles are faster) — but cache CETs are cheao (~0.1ms)I•Same throughput ceiling (5 successful calls/s — HubSpot's limit)• Same final outcome (~9k succeed, ~91k fail at T=30min)|MetricPrevious (this round)This roundSucceccful inhs in 20mina.o00O 000Wasted HubSoot APl calls~10.800~10.800Job non evcles/sed~50-100~100-2503 files +73 -43)Accent alliAsk anvthing (84.L)+ « CodeClaude Onus 4.7 MediumW Windsurf Teams04-25 UITE.Rio 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16370
|
735
|
15
|
2026-05-11T08:47:01.214348+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489221214_m2.jpg...
|
PhpStorm
|
faVsco.js – HubspotPaginationService.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
12
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\Pagination;
use Jiminny\Services\Crm\Hubspot\Client;
use Jiminny\Services\Crm\Hubspot\PayloadBuilder;
use Psr\Log\LoggerInterface;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
class HubspotPaginationService
{
public function __construct(
private LoggerInterface $logger
) {
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
Client $client,
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
$state = new PaginationState(offset: $offset);
$endpoint = Client::BASE_URL . "/crm/v3/objects/{$type}/search";
$defaultFilter = $payload['filters'] ?? [];
$resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;
$teamId = $client->getConfig()->getTeam()->getId();
$delay = $this->calculateDelayInMicroseconds();
do {
if ($this->shouldStopPagination($state, $teamId)) {
break;
}
$payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);
$this->validateTokenIfNeeded($client, $state);
if ($state->requestCount > 0) {
usleep($delay);
}
$page = $this->executeSearchRequest($client, $type, $payload, $state);
$state->setTotal($page['total'] ?? 0);
$this->updateLastRecordId($page, $state);
// Safely iterate over results with null check
$results = $page['results'] ?? [];
foreach ($results as $row) {
$state->incrementTotalRecords();
yield $row;
}
$state->setOffset($this->getNextOffset($page));
$state->incrementRequestCount();
$this->logPaginationProgress($state, $teamId, $endpoint);
} while ($state->offset && ! empty($page['results']));
// Log final pagination completion stats
$this->logger->info('[Hubspot] Pagination completed', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'total_requests' => $state->requestCount,
'total_records_fetched' => $state->totalRecords,
'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),
'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,
]);
// Update reference parameters
$total = $state->total;
$lastRecordId = $state->lastRecordId;
}
private function shouldStopPagination(PaginationState $state, int $teamId): bool
{
if ($state->hasReachedSafetyLimit()) {
$this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [
'team_id' => $teamId,
'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,
'total_fetched' => $state->totalRecords,
]);
return true;
}
return false;
}
private function handlePaginationStrategy(
array $payload,
array $defaultFilter,
PaginationState $state,
int $resultsPerPage,
int $teamId
): array {
if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {
$payload['filters'] = $defaultFilter;
$payload['filters'][] = [
'propertyName' => 'hs_object_id',
'operator' => 'LT',
'value' => $state->lastRecordId,
];
$this->logger->info('[Hubspot] Search keyset pagination request', [
'team_id' => $teamId,
'sequence' => $state->requestCount,
'itemsPerPage' => $resultsPerPage,
'payload' => $payload,
'total' => $state->total,
]);
unset($payload['after']);
$state->setOffset(0);
}
if ($state->offset) {
$payload['after'] = $state->offset;
}
return $payload;
}
private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool
{
// Check if we've hit the offset limit
$shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;
if ($shouldSwitch && $state->lastRecordId === null) {
$this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [
'request_count' => $state->requestCount,
'current_offset' => $state->offset,
'results_per_page' => $resultsPerPage,
'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,
]);
return false; // Continue with offset pagination
}
return $shouldSwitch;
}
private function validateTokenIfNeeded(Client $client, PaginationState $state): void
{
if ($state->shouldValidateToken()) {
$client->ensureValidToken();
$state->updateLastTokenCheck();
}
}
private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array
{
try {
return $client->search($objectType, $payload);
} catch (\Exception $e) {
if ($client->isUnauthorizedException($e)) {
$this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'error' => $e->getMessage(),
]);
$client->ensureValidToken();
$state->updateLastTokenCheck();
try {
$result = $client->search($objectType, $payload);
$this->logger->info('[Hubspot] Token refresh and retry successful', [
'team_id' => $client->getConfig()->getTeam()->getId(),
]);
return $result;
} catch (\Exception $retryException) {
$this->logger->error('[Hubspot] Retry request failed after token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'original_error' => $e->getMessage(),
'retry_error' => $retryException->getMessage(),
]);
throw $retryException;
}
}
// RateLimitException and other exceptions are re-thrown as-is
throw $e;
}
}
private function updateLastRecordId(array $page, PaginationState $state): void
{
$lastRecord = ! empty($page['results']) ? end($page['results']) : null;
$lastRecordId = $lastRecord['id'] ?? null;
$state->updateLastRecordId($lastRecordId);
}
private function getNextOffset(array $page): int
{
return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;
}
private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void
{
if ($state->shouldLogProgress()) {
$this->logger->info('[Hubspot] Pagination progress log', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'requests_made' => $state->requestCount,
'records_fetched' => $state->totalRecords,
'elapsed_seconds' => $state->getElapsedSeconds(),
]);
}
}
private function calculateDelayInMicroseconds(): int
{
return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"12","depth":4,"bounds":{"left":0.38530585,"top":0.19952115,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.39660904,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.4039229,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n if ($this->shouldStopPagination($state, $teamId)) {\n break;\n }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n $this->validateTokenIfNeeded($client, $state);\n if ($state->requestCount > 0) {\n usleep($delay);\n }\n\n $page = $this->executeSearchRequest($client, $type, $payload, $state);\n\n $state->setTotal($page['total'] ?? 0);\n $this->updateLastRecordId($page, $state);\n\n // Safely iterate over results with null check\n $results = $page['results'] ?? [];\n foreach ($results as $row) {\n $state->incrementTotalRecords();\n yield $row;\n }\n\n $state->setOffset($this->getNextOffset($page));\n $state->incrementRequestCount();\n\n $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array\n {\n try {\n return $client->search($objectType, $payload);\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $result = $client->search($objectType, $payload);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $result;\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n }\n\n // RateLimitException and other exceptions are re-thrown as-is\n throw $e;\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n if ($this->shouldStopPagination($state, $teamId)) {\n break;\n }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n $this->validateTokenIfNeeded($client, $state);\n if ($state->requestCount > 0) {\n usleep($delay);\n }\n\n $page = $this->executeSearchRequest($client, $type, $payload, $state);\n\n $state->setTotal($page['total'] ?? 0);\n $this->updateLastRecordId($page, $state);\n\n // Safely iterate over results with null check\n $results = $page['results'] ?? [];\n foreach ($results as $row) {\n $state->incrementTotalRecords();\n yield $row;\n }\n\n $state->setOffset($this->getNextOffset($page));\n $state->incrementRequestCount();\n\n $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array\n {\n try {\n return $client->search($objectType, $payload);\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $result = $client->search($objectType, $payload);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $result;\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n }\n\n // RateLimitException and other exceptions are re-thrown as-is\n throw $e;\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-407834189715517514
|
-5733694816344956437
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
12
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\Pagination;
use Jiminny\Services\Crm\Hubspot\Client;
use Jiminny\Services\Crm\Hubspot\PayloadBuilder;
use Psr\Log\LoggerInterface;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
class HubspotPaginationService
{
public function __construct(
private LoggerInterface $logger
) {
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
Client $client,
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
$state = new PaginationState(offset: $offset);
$endpoint = Client::BASE_URL . "/crm/v3/objects/{$type}/search";
$defaultFilter = $payload['filters'] ?? [];
$resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;
$teamId = $client->getConfig()->getTeam()->getId();
$delay = $this->calculateDelayInMicroseconds();
do {
if ($this->shouldStopPagination($state, $teamId)) {
break;
}
$payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);
$this->validateTokenIfNeeded($client, $state);
if ($state->requestCount > 0) {
usleep($delay);
}
$page = $this->executeSearchRequest($client, $type, $payload, $state);
$state->setTotal($page['total'] ?? 0);
$this->updateLastRecordId($page, $state);
// Safely iterate over results with null check
$results = $page['results'] ?? [];
foreach ($results as $row) {
$state->incrementTotalRecords();
yield $row;
}
$state->setOffset($this->getNextOffset($page));
$state->incrementRequestCount();
$this->logPaginationProgress($state, $teamId, $endpoint);
} while ($state->offset && ! empty($page['results']));
// Log final pagination completion stats
$this->logger->info('[Hubspot] Pagination completed', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'total_requests' => $state->requestCount,
'total_records_fetched' => $state->totalRecords,
'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),
'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,
]);
// Update reference parameters
$total = $state->total;
$lastRecordId = $state->lastRecordId;
}
private function shouldStopPagination(PaginationState $state, int $teamId): bool
{
if ($state->hasReachedSafetyLimit()) {
$this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [
'team_id' => $teamId,
'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,
'total_fetched' => $state->totalRecords,
]);
return true;
}
return false;
}
private function handlePaginationStrategy(
array $payload,
array $defaultFilter,
PaginationState $state,
int $resultsPerPage,
int $teamId
): array {
if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {
$payload['filters'] = $defaultFilter;
$payload['filters'][] = [
'propertyName' => 'hs_object_id',
'operator' => 'LT',
'value' => $state->lastRecordId,
];
$this->logger->info('[Hubspot] Search keyset pagination request', [
'team_id' => $teamId,
'sequence' => $state->requestCount,
'itemsPerPage' => $resultsPerPage,
'payload' => $payload,
'total' => $state->total,
]);
unset($payload['after']);
$state->setOffset(0);
}
if ($state->offset) {
$payload['after'] = $state->offset;
}
return $payload;
}
private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool
{
// Check if we've hit the offset limit
$shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;
if ($shouldSwitch && $state->lastRecordId === null) {
$this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [
'request_count' => $state->requestCount,
'current_offset' => $state->offset,
'results_per_page' => $resultsPerPage,
'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,
]);
return false; // Continue with offset pagination
}
return $shouldSwitch;
}
private function validateTokenIfNeeded(Client $client, PaginationState $state): void
{
if ($state->shouldValidateToken()) {
$client->ensureValidToken();
$state->updateLastTokenCheck();
}
}
private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array
{
try {
return $client->search($objectType, $payload);
} catch (\Exception $e) {
if ($client->isUnauthorizedException($e)) {
$this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'error' => $e->getMessage(),
]);
$client->ensureValidToken();
$state->updateLastTokenCheck();
try {
$result = $client->search($objectType, $payload);
$this->logger->info('[Hubspot] Token refresh and retry successful', [
'team_id' => $client->getConfig()->getTeam()->getId(),
]);
return $result;
} catch (\Exception $retryException) {
$this->logger->error('[Hubspot] Retry request failed after token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'original_error' => $e->getMessage(),
'retry_error' => $retryException->getMessage(),
]);
throw $retryException;
}
}
// RateLimitException and other exceptions are re-thrown as-is
throw $e;
}
}
private function updateLastRecordId(array $page, PaginationState $state): void
{
$lastRecord = ! empty($page['results']) ? end($page['results']) : null;
$lastRecordId = $lastRecord['id'] ?? null;
$state->updateLastRecordId($lastRecordId);
}
private function getNextOffset(array $page): int
{
return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;
}
private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void
{
if ($state->shouldLogProgress()) {
$this->logger->info('[Hubspot] Pagination progress log', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'requests_made' => $state->requestCount,
'records_fetched' => $state->totalRecords,
'elapsed_seconds' => $state->getElapsedSeconds(),
]);
}
}
private function calculateDelayInMicroseconds(): int
{
return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16369
|
NULL
|
NULL
|
NULL
|
|
16372
|
735
|
16
|
2026-05-11T08:47:31.625034+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489251625_m2.jpg...
|
PhpStorm
|
faVsco.js – HubspotPaginationService.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
12
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\Pagination;
use Jiminny\Services\Crm\Hubspot\Client;
use Jiminny\Services\Crm\Hubspot\PayloadBuilder;
use Psr\Log\LoggerInterface;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
class HubspotPaginationService
{
public function __construct(
private LoggerInterface $logger
) {
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
Client $client,
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
$state = new PaginationState(offset: $offset);
$endpoint = Client::BASE_URL . "/crm/v3/objects/{$type}/search";
$defaultFilter = $payload['filters'] ?? [];
$resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;
$teamId = $client->getConfig()->getTeam()->getId();
$delay = $this->calculateDelayInMicroseconds();
do {
if ($this->shouldStopPagination($state, $teamId)) {
break;
}
$payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);
$this->validateTokenIfNeeded($client, $state);
if ($state->requestCount > 0) {
usleep($delay);
}
$page = $this->executeSearchRequest($client, $type, $payload, $state);
$state->setTotal($page['total'] ?? 0);
$this->updateLastRecordId($page, $state);
// Safely iterate over results with null check
$results = $page['results'] ?? [];
foreach ($results as $row) {
$state->incrementTotalRecords();
yield $row;
}
$state->setOffset($this->getNextOffset($page));
$state->incrementRequestCount();
$this->logPaginationProgress($state, $teamId, $endpoint);
} while ($state->offset && ! empty($page['results']));
// Log final pagination completion stats
$this->logger->info('[Hubspot] Pagination completed', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'total_requests' => $state->requestCount,
'total_records_fetched' => $state->totalRecords,
'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),
'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,
]);
// Update reference parameters
$total = $state->total;
$lastRecordId = $state->lastRecordId;
}
private function shouldStopPagination(PaginationState $state, int $teamId): bool
{
if ($state->hasReachedSafetyLimit()) {
$this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [
'team_id' => $teamId,
'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,
'total_fetched' => $state->totalRecords,
]);
return true;
}
return false;
}
private function handlePaginationStrategy(
array $payload,
array $defaultFilter,
PaginationState $state,
int $resultsPerPage,
int $teamId
): array {
if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {
$payload['filters'] = $defaultFilter;
$payload['filters'][] = [
'propertyName' => 'hs_object_id',
'operator' => 'LT',
'value' => $state->lastRecordId,
];
$this->logger->info('[Hubspot] Search keyset pagination request', [
'team_id' => $teamId,
'sequence' => $state->requestCount,
'itemsPerPage' => $resultsPerPage,
'payload' => $payload,
'total' => $state->total,
]);
unset($payload['after']);
$state->setOffset(0);
}
if ($state->offset) {
$payload['after'] = $state->offset;
}
return $payload;
}
private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool
{
// Check if we've hit the offset limit
$shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;
if ($shouldSwitch && $state->lastRecordId === null) {
$this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [
'request_count' => $state->requestCount,
'current_offset' => $state->offset,
'results_per_page' => $resultsPerPage,
'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,
]);
return false; // Continue with offset pagination
}
return $shouldSwitch;
}
private function validateTokenIfNeeded(Client $client, PaginationState $state): void
{
if ($state->shouldValidateToken()) {
$client->ensureValidToken();
$state->updateLastTokenCheck();
}
}
private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array
{
try {
return $client->search($objectType, $payload);
} catch (\Exception $e) {
if ($client->isUnauthorizedException($e)) {
$this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'error' => $e->getMessage(),
]);
$client->ensureValidToken();
$state->updateLastTokenCheck();
try {
$result = $client->search($objectType, $payload);
$this->logger->info('[Hubspot] Token refresh and retry successful', [
'team_id' => $client->getConfig()->getTeam()->getId(),
]);
return $result;
} catch (\Exception $retryException) {
$this->logger->error('[Hubspot] Retry request failed after token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'original_error' => $e->getMessage(),
'retry_error' => $retryException->getMessage(),
]);
throw $retryException;
}
}
// RateLimitException and other exceptions are re-thrown as-is
throw $e;
}
}
private function updateLastRecordId(array $page, PaginationState $state): void
{
$lastRecord = ! empty($page['results']) ? end($page['results']) : null;
$lastRecordId = $lastRecord['id'] ?? null;
$state->updateLastRecordId($lastRecordId);
}
private function getNextOffset(array $page): int
{
return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;
}
private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void
{
if ($state->shouldLogProgress()) {
$this->logger->info('[Hubspot] Pagination progress log', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'requests_made' => $state->requestCount,
'records_fetched' => $state->totalRecords,
'elapsed_seconds' => $state->getElapsedSeconds(),
]);
}
}
private function calculateDelayInMicroseconds(): int
{
return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"12","depth":4,"bounds":{"left":0.38530585,"top":0.19952115,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.39660904,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.4039229,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n if ($this->shouldStopPagination($state, $teamId)) {\n break;\n }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n $this->validateTokenIfNeeded($client, $state);\n if ($state->requestCount > 0) {\n usleep($delay);\n }\n\n $page = $this->executeSearchRequest($client, $type, $payload, $state);\n\n $state->setTotal($page['total'] ?? 0);\n $this->updateLastRecordId($page, $state);\n\n // Safely iterate over results with null check\n $results = $page['results'] ?? [];\n foreach ($results as $row) {\n $state->incrementTotalRecords();\n yield $row;\n }\n\n $state->setOffset($this->getNextOffset($page));\n $state->incrementRequestCount();\n\n $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array\n {\n try {\n return $client->search($objectType, $payload);\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $result = $client->search($objectType, $payload);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $result;\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n }\n\n // RateLimitException and other exceptions are re-thrown as-is\n throw $e;\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n if ($this->shouldStopPagination($state, $teamId)) {\n break;\n }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n $this->validateTokenIfNeeded($client, $state);\n if ($state->requestCount > 0) {\n usleep($delay);\n }\n\n $page = $this->executeSearchRequest($client, $type, $payload, $state);\n\n $state->setTotal($page['total'] ?? 0);\n $this->updateLastRecordId($page, $state);\n\n // Safely iterate over results with null check\n $results = $page['results'] ?? [];\n foreach ($results as $row) {\n $state->incrementTotalRecords();\n yield $row;\n }\n\n $state->setOffset($this->getNextOffset($page));\n $state->incrementRequestCount();\n\n $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array\n {\n try {\n return $client->search($objectType, $payload);\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $result = $client->search($objectType, $payload);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $result;\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n }\n\n // RateLimitException and other exceptions are re-thrown as-is\n throw $e;\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-407834189715517514
|
-5733694816344956437
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
12
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\Pagination;
use Jiminny\Services\Crm\Hubspot\Client;
use Jiminny\Services\Crm\Hubspot\PayloadBuilder;
use Psr\Log\LoggerInterface;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
class HubspotPaginationService
{
public function __construct(
private LoggerInterface $logger
) {
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
Client $client,
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
$state = new PaginationState(offset: $offset);
$endpoint = Client::BASE_URL . "/crm/v3/objects/{$type}/search";
$defaultFilter = $payload['filters'] ?? [];
$resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;
$teamId = $client->getConfig()->getTeam()->getId();
$delay = $this->calculateDelayInMicroseconds();
do {
if ($this->shouldStopPagination($state, $teamId)) {
break;
}
$payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);
$this->validateTokenIfNeeded($client, $state);
if ($state->requestCount > 0) {
usleep($delay);
}
$page = $this->executeSearchRequest($client, $type, $payload, $state);
$state->setTotal($page['total'] ?? 0);
$this->updateLastRecordId($page, $state);
// Safely iterate over results with null check
$results = $page['results'] ?? [];
foreach ($results as $row) {
$state->incrementTotalRecords();
yield $row;
}
$state->setOffset($this->getNextOffset($page));
$state->incrementRequestCount();
$this->logPaginationProgress($state, $teamId, $endpoint);
} while ($state->offset && ! empty($page['results']));
// Log final pagination completion stats
$this->logger->info('[Hubspot] Pagination completed', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'total_requests' => $state->requestCount,
'total_records_fetched' => $state->totalRecords,
'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),
'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,
]);
// Update reference parameters
$total = $state->total;
$lastRecordId = $state->lastRecordId;
}
private function shouldStopPagination(PaginationState $state, int $teamId): bool
{
if ($state->hasReachedSafetyLimit()) {
$this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [
'team_id' => $teamId,
'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,
'total_fetched' => $state->totalRecords,
]);
return true;
}
return false;
}
private function handlePaginationStrategy(
array $payload,
array $defaultFilter,
PaginationState $state,
int $resultsPerPage,
int $teamId
): array {
if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {
$payload['filters'] = $defaultFilter;
$payload['filters'][] = [
'propertyName' => 'hs_object_id',
'operator' => 'LT',
'value' => $state->lastRecordId,
];
$this->logger->info('[Hubspot] Search keyset pagination request', [
'team_id' => $teamId,
'sequence' => $state->requestCount,
'itemsPerPage' => $resultsPerPage,
'payload' => $payload,
'total' => $state->total,
]);
unset($payload['after']);
$state->setOffset(0);
}
if ($state->offset) {
$payload['after'] = $state->offset;
}
return $payload;
}
private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool
{
// Check if we've hit the offset limit
$shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;
if ($shouldSwitch && $state->lastRecordId === null) {
$this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [
'request_count' => $state->requestCount,
'current_offset' => $state->offset,
'results_per_page' => $resultsPerPage,
'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,
]);
return false; // Continue with offset pagination
}
return $shouldSwitch;
}
private function validateTokenIfNeeded(Client $client, PaginationState $state): void
{
if ($state->shouldValidateToken()) {
$client->ensureValidToken();
$state->updateLastTokenCheck();
}
}
private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array
{
try {
return $client->search($objectType, $payload);
} catch (\Exception $e) {
if ($client->isUnauthorizedException($e)) {
$this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'error' => $e->getMessage(),
]);
$client->ensureValidToken();
$state->updateLastTokenCheck();
try {
$result = $client->search($objectType, $payload);
$this->logger->info('[Hubspot] Token refresh and retry successful', [
'team_id' => $client->getConfig()->getTeam()->getId(),
]);
return $result;
} catch (\Exception $retryException) {
$this->logger->error('[Hubspot] Retry request failed after token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'original_error' => $e->getMessage(),
'retry_error' => $retryException->getMessage(),
]);
throw $retryException;
}
}
// RateLimitException and other exceptions are re-thrown as-is
throw $e;
}
}
private function updateLastRecordId(array $page, PaginationState $state): void
{
$lastRecord = ! empty($page['results']) ? end($page['results']) : null;
$lastRecordId = $lastRecord['id'] ?? null;
$state->updateLastRecordId($lastRecordId);
}
private function getNextOffset(array $page): int
{
return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;
}
private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void
{
if ($state->shouldLogProgress()) {
$this->logger->info('[Hubspot] Pagination progress log', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'requests_made' => $state->requestCount,
'records_fetched' => $state->totalRecords,
'elapsed_seconds' => $state->getElapsedSeconds(),
]);
}
}
private function calculateDelayInMicroseconds(): int
{
return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16374
|
735
|
17
|
2026-05-11T08:47:41.225511+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489261225_m2.jpg...
|
Slack
|
! releases (Channel) - Jiminny Inc - 3 new items - ! releases (Channel) - Jiminny Inc - 3 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Galya Dimitrova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Aneliya Angelova
James Graham
Lukas Kovalik
you
Toast
Jira Cloud
Google Calendar
Messages
Messages
Files
Files
Bookmarks
Bookmarks
Add and Edit Channel Tabs...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018949468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.027593086,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.025930852,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":17,"bounds":{"left":0.61170214,"top":1.0,"width":0.030917553,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"bounds":{"left":0.64361703,"top":1.0,"width":0.020944148,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Bookmarks","depth":17,"bounds":{"left":0.66589093,"top":1.0,"width":0.033909574,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Bookmarks","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"bounds":{"left":0.70079786,"top":1.0,"width":0.010970744,"height":-0.09177971},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7736274077533742324
|
-3477432178297495897
|
click
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Galya Dimitrova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Aneliya Angelova
James Graham
Lukas Kovalik
you
Toast
Jira Cloud
Google Calendar
Messages
Messages
Files
Files
Bookmarks
Bookmarks
Add and Edit Channel Tabs
PhostormVIewINavicarecodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-linroledey© HubspotWebhoc© HubspotSyncStrategyBase.phpv @ PaginationC Paginationcontic* RateLimitexC) Paginationstate•_ Prospectsearchstr> 0 RedisC) ProviderRateLimiter.phpC) PaqinationConfia.phpv D ServiceTraitsclass HubsootPaginationServicem A12 ^ v# Opportunitysync+ SyncermEntitiesT SuncFieldstrait.T Writecrmtrait.p•DUts• WeonookC) BatchSvncCollectoC) BatchSvncRedisSe© Client.phpC) ClosedDealStadessG DealFieldsService.p© DecorateActivity.ph© FieldDefinitions.phpC) SieldTvneConverte(0) HubsnotClientinter© HubspotTokenManUPayloadBullder.pnp 101G DomotoCrmOhiontlUa) DocnoncoNlormalizec) service.ono© SyncFieldAction.ph© SyncRelatedActivity 106c) WebhooksyncBatcC IntegrationApp› Accessors• W Api|• contioMDTO• FiltersaobsServiceTraitsC) Dataclient.ohoC) DecorateActivitv.ofC LocalSearch.nhn(0 Loca|Searchinterfad© RemoteSearch.php© Service.phpv D Listeners© ConvertLeadActivite Duraol aokunGachalM Motadata• M Miarationpublic function getpaginatedbataGenerator'total_records_fetched' => $state->totalRecords,Itotall elansed seconds: => roundisstate->aetslansedSecondso. orecision: 7).'average_seconds_per_request' => $state-›requestCount › 0 ? round( num: $state->getElapsedSeconds(// Update reference parametersStotal = $state->total;$lastRecordId = $state->lastRecordId;private function shouldStopPagination(PaqinationState $state, int SteamId): boolf...}private function handlePaginationStrategy(array Spayloadarrav soetaultrzlter.PaginationState $state,arrav "...;private function shouldSwitchToKeysetPagination(PaginationState $state, int SresultsPerPage): boolt...,private function validateTokenIfNeeded(Client Sclient, PaginationState $state): voidt...}lusageprivate function executeSearchRequest(Client Sclient, string SobjectType, array Spayload, PaginationStatetryfreturn $client->search(SobjectType, Spayload);} catch (\Exception $e) {i4 (6cljont-sicllnauthonigedFycention(6o))SSthis->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh'. ['team id' => Sclient-›qetConfiq(->qetTeam@->qetIdo'error' => $e->qetMessage(1:Scuient->ensureValidTokenoolner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)25A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console leu)# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"Concent-lvoe". "apolicacionison charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-S0F"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSUbDomains: preload"),"access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"7"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\",("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server":["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545suppont Dally • In sh 13m100% 2• Mon 11 May 11:47:40AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re+0 ..ReasonRateLimitException.phpRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int (retry after) instead of arraySimpler: no policy to trackDrop policy from RateL1m1tException constructonMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceotMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAtter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iohs with delav 1-6c (chean evcles. all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch. no siob→>failo, no excention fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue cvcles per second per worken• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successtul calls/s — HubSoot's limit))• Same final outcome (29k succeed. 291k fail at T-30min)|MetricSuccessful jobs in 30minPrevious (this round)This round9,000Wasted HubSpot API calls~10,800Job pop cycles/sec~50-1009,000~10,800~100-250|Log entries (with sampling)~10000~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-side throttling3 files +73 -43>Ask anvthina (&4L)+ « CodeClaude Onus 4.7 MediumAccent alliWN Windsurf Toams 26.52 UTF.Rio 4 spaces...
|
16372
|
NULL
|
NULL
|
NULL
|
|
16376
|
735
|
18
|
2026-05-11T08:47:43.674384+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489263674_m2.jpg...
|
Slack
|
Stefka Stoyanova (DM) - Jiminny Inc - 3 new items Stefka Stoyanova (DM) - Jiminny Inc - 3 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Galya Dimitrova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Aneliya Angelova
James Graham
Lukas Kovalik
you
Toast
Jira Cloud
Google Calendar
Messages
Messages
Files
Files
Untitled
Untitled
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Stefka Stoyanova
Apr 28th at 6:41:11 PM
6:41 PM
здарсти Лукаш, понеже си в отпуска от утре - това
https://jiminny.atlassian.net/browse/JY-20508
https://jiminny.atlassian.net/browse/JY-20508
готово ли е за QA?
Jira Cloud
Jira Cloud
Jira Cloud Story JY-20508 Notify a user before the AJ Report expires Story JY-20508 in Jira Cloud Preview in Slack Status Code Review Priority Medium Medium Assignee Lukas Kovalik(you) As of Apr 28 Refresh Open in Jira ✨ Summarise
Notify a user before the AJ Report expires
Story JY-20508 in Jira Cloud
Preview in Slack
Status
Code Review
Priority
Medium
Assignee
Lukas Kovalik
(you)
As of Apr 28
Refresh
Open in Jira
✨ Summarise
Open in browser
Share Story JY-20508
View conversations
More actions
Lukas Kovalik
Apr 28th at 6:41:39 PM
6:41 PM
здрасти да, даже тествано
Apr 28th at 6:41:57 PM
6:41
не искам да го пусна сега и да си ходя, но може да се деплойне
Apr 28th at 6:42:08 PM
6:42
сега ще напиша в канала
Stefka Stoyanova
Apr 28th at 6:42:26 PM
6:42 PM
добре, аз ще го сложа ready to deploy, утре някой ще го деплойне
Apr 28th at 6:43:18 PM
6:43
приятна отпуска
Lukas Kovalik
Apr 28th at 6:44:07 PM
6:44 PM
благодаря
Jump to date
Stefka Stoyanova
Today at 10:08:49 AM
10:08 AM
Лукаш, щом пре-рефайнмънта и рефайнмънта ще са само за MCP ако искаш не идвай да си губиш времето
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:12:35 AM
10:12 AM
да, няма да идвам
1 reaction, react with +1 emoji
1
Add reaction…
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Stefka Stoyanova
Today at 11:35:58 AM
11:35 AM
Лукаш, ще сложиш ли естимейт на
https://jiminny.atlassian.net/browse/JY-20818...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018949468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.027593086,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.025930852,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":18,"bounds":{"left":0.61170214,"top":1.0,"width":0.030917553,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":18,"bounds":{"left":0.64361703,"top":1.0,"width":0.020944148,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Untitled","depth":18,"bounds":{"left":0.66589093,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Untitled","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More","depth":19,"bounds":{"left":0.6961436,"top":1.0,"width":0.020279255,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":18,"bounds":{"left":0.71642286,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":18,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stefka Stoyanova","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:41:11 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:41 PM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здарсти Лукаш, понеже си в отпуска от утре - това","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/JY-20508","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/JY-20508","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"готово ли е за QA?","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Jira Cloud Story JY-20508 Notify a user before the AJ Report expires Story JY-20508 in Jira Cloud Preview in Slack Status Code Review Priority Medium Medium Assignee Lukas Kovalik(you) As of Apr 28 Refresh Open in Jira ✨ Summarise","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Notify a user before the AJ Report expires","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Story JY-20508 in Jira Cloud","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Code Review","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Priority","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Medium","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"As of Apr 28","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarise","depth":28,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":28,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Story JY-20508","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:41:39 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:41 PM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти да, даже тествано","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:41:57 PM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:41","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"не искам да го пусна сега и да си ходя, но може да се деплойне","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:42:08 PM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:42","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"сега ще напиша в канала","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stefka Stoyanova","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:42:26 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:42 PM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"добре, аз ще го сложа ready to deploy, утре някой ще го деплойне","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:43:18 PM","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:43","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"приятна отпуска","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:44:07 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:44 PM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"благодаря","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stefka Stoyanova","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 10:08:49 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:08 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Лукаш, щом пре-рефайнмънта и рефайнмънта ще са само за MCP ако искаш не идвай да си губиш времето","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":26,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 10:12:35 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:12 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"да, няма да идвам","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"1 reaction, react with +1 emoji","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Add reaction…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":26,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stefka Stoyanova","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 11:35:58 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11:35 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Лукаш, ще сложиш ли естимейт на","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/JY-20818","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1924356142550365834
|
6427997448034354262
|
click
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Galya Dimitrova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Aneliya Angelova
James Graham
Lukas Kovalik
you
Toast
Jira Cloud
Google Calendar
Messages
Messages
Files
Files
Untitled
Untitled
More
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Stefka Stoyanova
Apr 28th at 6:41:11 PM
6:41 PM
здарсти Лукаш, понеже си в отпуска от утре - това
https://jiminny.atlassian.net/browse/JY-20508
https://jiminny.atlassian.net/browse/JY-20508
готово ли е за QA?
Jira Cloud
Jira Cloud
Jira Cloud Story JY-20508 Notify a user before the AJ Report expires Story JY-20508 in Jira Cloud Preview in Slack Status Code Review Priority Medium Medium Assignee Lukas Kovalik(you) As of Apr 28 Refresh Open in Jira ✨ Summarise
Notify a user before the AJ Report expires
Story JY-20508 in Jira Cloud
Preview in Slack
Status
Code Review
Priority
Medium
Assignee
Lukas Kovalik
(you)
As of Apr 28
Refresh
Open in Jira
✨ Summarise
Open in browser
Share Story JY-20508
View conversations
More actions
Lukas Kovalik
Apr 28th at 6:41:39 PM
6:41 PM
здрасти да, даже тествано
Apr 28th at 6:41:57 PM
6:41
не искам да го пусна сега и да си ходя, но може да се деплойне
Apr 28th at 6:42:08 PM
6:42
сега ще напиша в канала
Stefka Stoyanova
Apr 28th at 6:42:26 PM
6:42 PM
добре, аз ще го сложа ready to deploy, утре някой ще го деплойне
Apr 28th at 6:43:18 PM
6:43
приятна отпуска
Lukas Kovalik
Apr 28th at 6:44:07 PM
6:44 PM
благодаря
Jump to date
Stefka Stoyanova
Today at 10:08:49 AM
10:08 AM
Лукаш, щом пре-рефайнмънта и рефайнмънта ще са само за MCP ако искаш не идвай да си губиш времето
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:12:35 AM
10:12 AM
да, няма да идвам
1 reaction, react with +1 emoji
1
Add reaction…
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Stefka Stoyanova
Today at 11:35:58 AM
11:35 AM
Лукаш, ще сложиш ли естимейт на
https://jiminny.atlassian.net/browse/JY-20818
FV faVsco.jsroledey© HubspotWebhoc© HubspotSyncStrategyBase.phpv D PaginationC Paginationcontic)MatchactivitycrmData.ong* RateLimitexC) Paginationstate•_ Prospectsearchstr> 0 RedisC) ProviderRateLimiter.phpC) PaqinationConfia.phpv D ServiceTraitsclass HubsootPaginationServicem A12 ^ v# Opportunitysync+ SyncermEntitiesT SuncFieldstrait.T Writecrmtrait.p•2Uuls• WeonookC) BatchSvncCollectoC) BatchSvncRedisSe© Client.phpC) ClosedDealStadessG DealFieldsService.p© DecorateActivity.ph© FieldDefinitions.phpC) SieldTvneConverte(0) HubsnotClientinter© HubspotTokenManUPayloadsunlder.pnp 101G DomotoCrmOhiontlUa) DocnoncoNlormalizec) service.ono© SyncFieldAction.ph© SyncRelatedActivity 106c) WebhooksyncBatcC IntegrationApp› Accessors• W Api|• contioMDTO• FiltersaobsServiceTraitsC) Dataclient.ohoC) DecorateActivitv.ofC LocalSearch.nhn(0 Loca|Searchinterfad© RemoteSearch.php© Service.phpv D Listeners© ConvertLeadActivite Duraol aokunGachalM Motadata• M Miarationpublic function getpaginatedbataGenerator'total_records_fetched' => $state->totalRecords,Itotall elansed seconds: => roundisstate->aetslansedSecondso. orecision: 7).'average_seconds_per_request' => $state-›requestCount › 0 ? round( num: $state->getElapsedSeconds(// Update reference parametersStotal = $state->total;$lastRecordId = $state->lastRecordId;private function shouldStopPagination(PaqinationState $state, int SteamId): boolf...}private function handlePaginationStrategy(array Spayloadarrav soetaultrzlter.PaginationState $state,arrav "...;private function shouldSwitchtoKeysetPagination(PaginationState $state, int SresultsPerPage): boolt...*private function validateTokenIfNeeded(Client Sclient, PaginationState $state): voidt...}lusageprivate function executeSearchRequest(Client Sclient, string $objectType, array Spayload, PaginationStatetryfreturn $client->search(SobjectType, Spayload);} catch (\Exception $e) {i4 (6cljont-sicllnauthonigedFycention(6o))SSthis->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh'. ['team id' => Sclient-›qetConfiq(->qetTeam@->qetIdo'error' => $e->qetMessage(1);Scuient->ensureValidTokenos25A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console leu)# console [slAGiNG)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-S0F"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSUbDomains: preload"),"access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server":["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545support Dally • In 3n 131100% 5.• мon 11 Mау 11.4/.45AskJiminnyReportActivityServiceTest vCascadeHubspot Rate Limit Re+0 ..ReasonRateLimitException.phpRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int (retry after) instead of arrayDrop policy from RateL1m1tException constructorMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceofMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAtter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iohs with delav 1-6c (chean evcles. all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch. no siob→>failo, no excention fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue cvcles per second per worken• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successtul calls/s — HubSoot's limit))• Same final outcome (29k succeed. 291k fail at T-30min)|MetricSuccessful jobs in 30minPrevious (this round)This round9,000Wasted HubSpot API calls~10,800Job pop cycles/sec~50-1009,000~10,800~100-250|Log entries (with sampling)~10000~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-cide throttlina3 files +73 -43>Ask anvthina (&4L)+ « CodeClaude Onus 4.7 MediumAccent alliW Windsurf Teams 26.52UTF.Afo 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16380
|
735
|
19
|
2026-05-11T08:47:50.113600+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489270113_m2.jpg...
|
Slack
|
Stefka Stoyanova (DM) - Jiminny Inc - 3 new items Stefka Stoyanova (DM) - Jiminny Inc - 3 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Galya Dimitrova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Aneliya Angelova
James Graham
Lukas Kovalik
you
Jira Cloud
Toast
Google Calendar
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Open in Jira Cloud
Jira Cloud
Details
Conversations 1
Description
None
Status
Deployed
Assignee
Lukas Kovalik
Reporter
Lukas Kovalik
Work Type
Bug
Priority
Medium
Parent
JY-19240
Components
Platform
Sprint
Platform Sprint 3 Q2
Story point estimate
None
Fix versions
None
Regression
No
Expected outcome
None
Days
None
Need QA
None
Labels
None
Actual outcome
None
Sub-Product
None
Steps to reproduce
None
Story Points
None
Environment
None
Updated just now
Open in Jira
✨ Summarise
More actions
loading…
loading…...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018949468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.027593086,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.025930852,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Move Ask Jiminny reports to separated datadog metric","depth":19,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"Move Ask Jiminny reports to separated datadog metric","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Open in Jira Cloud","depth":19,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jira Cloud","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Details","depth":20,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Conversations 1","depth":20,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Description","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Deployed","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Reporter","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Work Type","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bug","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Priority","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Medium","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Parent","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"JY-19240","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Components","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Platform","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sprint","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Platform Sprint 3 Q2","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Story point estimate","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fix versions","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Regression","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"No","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Expected outcome","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Days","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Need QA","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Labels","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Actual outcome","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sub-Product","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Steps to reproduce","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Story Points","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Environment","depth":20,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Updated just now","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Open in Jira","depth":17,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarise","depth":17,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":17,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"loading…","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"loading…","depth":11,"on_screen":false,"role_description":"text"}]...
|
-1202698228873846302
|
-3528940020266660293
|
click
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Galya Dimitrova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Aneliya Angelova
James Graham
Lukas Kovalik
you
Jira Cloud
Toast
Google Calendar
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Open in Jira Cloud
Jira Cloud
Details
Conversations 1
Description
None
Status
Deployed
Assignee
Lukas Kovalik
Reporter
Lukas Kovalik
Work Type
Bug
Priority
Medium
Parent
JY-19240
Components
Platform
Sprint
Platform Sprint 3 Q2
Story point estimate
None
Fix versions
None
Regression
No
Expected outcome
None
Days
None
Need QA
None
Labels
None
Actual outcome
None
Sub-Product
None
Steps to reproduce
None
Story Points
None
Environment
None
Updated just now
Open in Jira
✨ Summarise
More actions
loading…
loading…
FV faVsco.jsroledey© HubspotWebhoc© HubspotSyncStrategyBase.phpv D PaginationC Paginationcontic)MatchactivitycrmData.ong* RateLimitexC) Paginationstate•_ Prospectsearchstr> 0 RedisC) ProviderRateLimiter.phpC) PaqinationConfia.phpv D ServiceTraitsclass HubsootPaginationServicem A12 ^ v# Opportunitysync+ SyncermEntitiesT SuncFieldstrait.T Writecrmtrait.p•2Uuls• WeonookC) BatchSvncCollectoC) BatchSvncRedisSe© Client.phpC) ClosedDealStadessG DealFieldsService.p© DecorateActivity.ph© FieldDefinitions.phpC) SieldTvneConverte(0) HubsnotClientinter© HubspotTokenManUPayloadsunlder.pnp 101G DomotoCrmOhiontlUa) DocnoncoNlormalizec) service.ono© SyncFieldAction.ph© SyncRelatedActivity 106c) WebhooksyncBatcC IntegrationApp› Accessors• W Api|• contioMDTO• FiltersaobsServiceTraitsC) Dataclient.ohoC) DecorateActivitv.ofC LocalSearch.nhn(0 Loca|Searchinterfad© RemoteSearch.php© Service.phpv D Listeners© ConvertLeadActivite Duraol aokunGachalM Motadata• M Miarationpublic function getpaginatedbataGenerator'total_records_fetched' => $state->totalRecords,Itotall elansed seconds: => roundisstate->aetslansedSecondso. orecision: 7).'average_seconds_per_request' => $state-›requestCount › 0 ? round( num: $state->getElapsedSeconds(// Update reference parametersStotal = $state->total;$lastRecordId = $state->lastRecordId;private function shouldStopPagination(PaqinationState $state, int SteamId): boolf...}private function handlePaginationStrategy(array Spayloadarrav soetaultrzlter.PaginationState $state,arrav "...;private function shouldSwitchtoKeysetPagination(PaginationState $state, int SresultsPerPage): boolt...*private function validateTokenIfNeeded(Client Sclient, PaginationState $state): voidt...}lusageprivate function executeSearchRequest(Client Sclient, string $objectType, array Spayload, PaginationStatetryfreturn $client->search(SobjectType, Spayload);} catch (\Exception $e) {i4 (6cljont-sicllnauthonigedFycention(6o))SSthis->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh'. ['team id' => Sclient-›qetConfiq(->qetTeam@->qetIdo'error' => $e->qetMessage(1);Scuient->ensureValidTokenos25A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console leu)# console [slAGiNG)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-S0F"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSUbDomains: preload"),"access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server":["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545support Dally • In 3n 131100% 5• мon 11 Mау 11.4/.44AskJiminnyReportActivityServiceTest vCascadeHubspot Rate Limit Re+0 ..ReasonRateLimitException.phpRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int retry after) instead of arrayDrop policy from RateL1m1tException constructorMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceofMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAtter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iohs with delav 1-6c (chean evcles. all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch. no siob→>failo, no excention fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue cvcles per second per worken• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successtul calls/s — HubSoot's limit))• Same final outcome (29k succeed. 291k fail at T-30min)|MetricSuccessful jobs in 30minPrevious (this round)This round9,000Wasted HubSpot API calls~10,800Job pop cycles/sec~50-1009,000~10,800~100-250|Log entries (with sampling)~10000~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-cide throttlina3 files +73 -43>Ask anvthina (&4L)+ « CodeClaude Onus 4.7 MediumAccent alliW Windsurf Teams 26.52UTF.Afo 4 spaces...
|
16376
|
NULL
|
NULL
|
NULL
|
|
16382
|
735
|
20
|
2026-05-11T08:47:52.761863+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489272761_m2.jpg...
|
Slack
|
Stefka Stoyanova (DM) - Jiminny Inc - 3 new items Stefka Stoyanova (DM) - Jiminny Inc - 3 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Galya Dimitrova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Aneliya Angelova
James Graham
Lukas Kovalik
you
Jira Cloud
Toast
Google Calendar
Messages
Messages
Files
Files
Untitled
Untitled
Untitled
Untitled
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Stefka Stoyanova
Apr 28th at 6:41:11 PM
6:41 PM
здарсти Лукаш, понеже си в отпуска от утре - това
https://jiminny.atlassian.net/browse/JY-20508
https://jiminny.atlassian.net/browse/JY-20508
готово ли е за QA?
Jira Cloud
Jira Cloud
Jira Cloud Story JY-20508 Notify a user before the AJ Report expires Story JY-20508 in Jira Cloud Preview in Slack Status Code Review Priority Medium Medium Assignee Lukas Kovalik(you) As of Apr 28 Refresh Open in Jira ✨ Summarise
Notify a user before the AJ Report expires
Story JY-20508 in Jira Cloud
Preview in Slack
Status
Code Review
Priority
Medium
Assignee
Lukas Kovalik
(you)
As of Apr 28
Refresh
Open in Jira
✨ Summarise
Open in browser
Share Story JY-20508
View conversations
More actions
Lukas Kovalik
Apr 28th at 6:41:39 PM
6:41 PM
здрасти да, даже тествано
Apr 28th at 6:41:57 PM
6:41
не искам да го пусна сега и да си ходя, но може да се деплойне
Apr 28th at 6:42:08 PM
6:42
сега ще напиша в канала
Stefka Stoyanova
Apr 28th at 6:42:26 PM
6:42 PM
добре, аз ще го сложа ready to deploy, утре някой ще го деплойне
Apr 28th at 6:43:18 PM
6:43
приятна отпуска
Lukas Kovalik
Apr 28th at 6:44:07 PM
6:44 PM
благодаря
Jump to date
Stefka Stoyanova
Today at 10:08:49 AM
10:08 AM
Лукаш, щом пре-рефайнмънта и рефайнмънта ще са само за MCP ако искаш не идвай да си губиш времето
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:12:35 AM
10:12 AM
да, няма да идвам
1 reaction, react with +1 emoji
1
Add reaction…
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Stefka Stoyanova
Today at 11:35:58 AM
11:35 AM
Лукаш, ще сложиш ли естимейт на
https://jiminny.atlassian.net/browse/JY-20818
https://jiminny.atlassian.net/browse/JY-20818
Jira Cloud
Jira Cloud
Jira Cloud Bug JY-20818 Move Ask Jiminny reports to separated datadog metric Bug JY-20818 in Jira Cloud Preview in Slack Status Deployed Priority Medium Medium Assignee Lukas Kovalik(you) As of today at 11:35 AM Refresh Open in Jira ✨ Summarise
Move Ask Jiminny reports to separated datadog metric
Bug JY-20818 in Jira Cloud
Preview in Slack
Status
Deployed
Priority
Medium
Assignee
Lukas Kovalik
(you)
As of today at 11:35 AM
Refresh
Open in Jira
✨ Summarise
Open in browser
Share Bug JY-20818
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
loading…
loading…...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018949468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.027593086,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.025930852,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":17,"bounds":{"left":0.61170214,"top":1.0,"width":0.030917553,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"bounds":{"left":0.64361703,"top":1.0,"width":0.020944148,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Untitled","depth":17,"bounds":{"left":0.66589093,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Untitled","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Untitled","depth":17,"bounds":{"left":0.6961436,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Untitled","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"bounds":{"left":0.72672874,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:41:11 PM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:41 PM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здарсти Лукаш, понеже си в отпуска от утре - това","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/JY-20508","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/JY-20508","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"готово ли е за QA?","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Jira Cloud Story JY-20508 Notify a user before the AJ Report expires Story JY-20508 in Jira Cloud Preview in Slack Status Code Review Priority Medium Medium Assignee Lukas Kovalik(you) As of Apr 28 Refresh Open in Jira ✨ Summarise","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Notify a user before the AJ Report expires","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Story JY-20508 in Jira Cloud","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Code Review","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Priority","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Medium","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"As of Apr 28","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarise","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Story JY-20508","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:41:39 PM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:41 PM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"здрасти да, даже тествано","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:41:57 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:41","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"не искам да го пусна сега и да си ходя, но може да се деплойне","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:42:08 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:42","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"сега ще напиша в канала","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:42:26 PM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:42 PM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"добре, аз ще го сложа ready to deploy, утре някой ще го деплойне","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:43:18 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:43","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"приятна отпуска","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Apr 28th at 6:44:07 PM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:44 PM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"благодаря","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 10:08:49 AM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:08 AM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Лукаш, щом пре-рефайнмънта и рефайнмънта ще са само за MCP ако искаш не идвай да си губиш времето","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":25,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 10:12:35 AM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:12 AM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"да, няма да идвам","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"1 reaction, react with +1 emoji","depth":24,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Add reaction…","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"on_screen":false,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":25,"on_screen":false,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 11:35:58 AM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11:35 AM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Лукаш, ще сложиш ли естимейт на","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/JY-20818","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/JY-20818","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Jira Cloud Bug JY-20818 Move Ask Jiminny reports to separated datadog metric Bug JY-20818 in Jira Cloud Preview in Slack Status Deployed Priority Medium Medium Assignee Lukas Kovalik(you) As of today at 11:35 AM Refresh Open in Jira ✨ Summarise","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Move Ask Jiminny reports to separated datadog metric","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bug JY-20818 in Jira Cloud","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Deployed","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Priority","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Medium","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"As of today at 11:35 AM","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarise","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Bug JY-20818","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":25,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":23,"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"loading…","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"loading…","depth":11,"on_screen":false,"role_description":"text"}]...
|
-2083293120027101101
|
5986503912708146262
|
click
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Galya Dimitrova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Aneliya Angelova
James Graham
Lukas Kovalik
you
Jira Cloud
Toast
Google Calendar
Messages
Messages
Files
Files
Untitled
Untitled
Untitled
Untitled
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Stefka Stoyanova
Apr 28th at 6:41:11 PM
6:41 PM
здарсти Лукаш, понеже си в отпуска от утре - това
https://jiminny.atlassian.net/browse/JY-20508
https://jiminny.atlassian.net/browse/JY-20508
готово ли е за QA?
Jira Cloud
Jira Cloud
Jira Cloud Story JY-20508 Notify a user before the AJ Report expires Story JY-20508 in Jira Cloud Preview in Slack Status Code Review Priority Medium Medium Assignee Lukas Kovalik(you) As of Apr 28 Refresh Open in Jira ✨ Summarise
Notify a user before the AJ Report expires
Story JY-20508 in Jira Cloud
Preview in Slack
Status
Code Review
Priority
Medium
Assignee
Lukas Kovalik
(you)
As of Apr 28
Refresh
Open in Jira
✨ Summarise
Open in browser
Share Story JY-20508
View conversations
More actions
Lukas Kovalik
Apr 28th at 6:41:39 PM
6:41 PM
здрасти да, даже тествано
Apr 28th at 6:41:57 PM
6:41
не искам да го пусна сега и да си ходя, но може да се деплойне
Apr 28th at 6:42:08 PM
6:42
сега ще напиша в канала
Stefka Stoyanova
Apr 28th at 6:42:26 PM
6:42 PM
добре, аз ще го сложа ready to deploy, утре някой ще го деплойне
Apr 28th at 6:43:18 PM
6:43
приятна отпуска
Lukas Kovalik
Apr 28th at 6:44:07 PM
6:44 PM
благодаря
Jump to date
Stefka Stoyanova
Today at 10:08:49 AM
10:08 AM
Лукаш, щом пре-рефайнмънта и рефайнмънта ще са само за MCP ако искаш не идвай да си губиш времето
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:12:35 AM
10:12 AM
да, няма да идвам
1 reaction, react with +1 emoji
1
Add reaction…
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Stefka Stoyanova
Today at 11:35:58 AM
11:35 AM
Лукаш, ще сложиш ли естимейт на
https://jiminny.atlassian.net/browse/JY-20818
https://jiminny.atlassian.net/browse/JY-20818
Jira Cloud
Jira Cloud
Jira Cloud Bug JY-20818 Move Ask Jiminny reports to separated datadog metric Bug JY-20818 in Jira Cloud Preview in Slack Status Deployed Priority Medium Medium Assignee Lukas Kovalik(you) As of today at 11:35 AM Refresh Open in Jira ✨ Summarise
Move Ask Jiminny reports to separated datadog metric
Bug JY-20818 in Jira Cloud
Preview in Slack
Status
Deployed
Priority
Medium
Assignee
Lukas Kovalik
(you)
As of today at 11:35 AM
Refresh
Open in Jira
✨ Summarise
Open in browser
Share Bug JY-20818
View conversations
More actions
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
loading…
loading…
FV faVsco.jsroledey© HubspotWebhoc© HubspotSyncStrategyBase.phpv D PaginationC Paginationcontic)MatchactivitycrmData.ong* RateLimitexC) Paginationstate•_ Prospectsearchstr> D RedisC) ProviderRateLimiter.phpC) PaqinationConfia.phpv D ServiceTraitsclass HubsootPaginationServicem A12 ^ v# Opportunitysync+ SyncermEntitiesT SuncFieldstrait.T Writecrmtrait.p•DUts• WeonookC) BatchSvncCollectoC) BatchSvncRedisSe© Client.phpC) ClosedDealStadessG DealFieldsService.p© DecorateActivity.ph© FieldDefinitions.phpC) SieldTvneConverte(0) HubsnotClientinter© HubspotTokenManUPayloadsunlder.pnp 101G DomotoCrmOhiontlUa) DocnoncoNlormalizec) service.ono© SyncFieldAction.ph© SyncRelatedActivity 106c) WebhooksyncBatcC IntegrationApp› Accessors• W Api|• contioMDTO• FiltersaobsServiceTraitsC) Dataclient.ohoC) DecorateActivitv.ofC LocalSearch.nhn(0 Loca|Searchinterfad© RemoteSearch.php© Service.phpv D Listeners© ConvertLeadActivite Duraol aokunGachalM Motadata• M Miarationpublic function getpaginatedbataGenerator'total_records_fetched' => $state->totalRecords,Itotall elansed seconds: => roundisstate->aetslansedSecondso. orecision: 7).'average_seconds_per_request' => $state-›requestCount › 0 ? round( num: $state->getElapsedSeconds(// Update reference parametersStotal = $state->total;$lastRecordId = $state->lastRecordId;private function shouldStopPagination(PaqinationState $state, int SteamId): boolf...}private function handlePaginationStrategy(array Spayloadarrav soetaultrzlter.PaginationState $state,arrav "...;private function shouldSwitchtoKeysetPagination(PaginationState $state, int SresultsPerPage): boolt...*private function validateTokenIfNeeded(Client Sclient, PaginationState $state): voidt...}lusageprivate function executeSearchRequest(Client Sclient, string $objectType, array Spayload, PaginationStatetryfreturn $client->search(SobjectType, Spayload);} catch (\Exception $e) {i4 (6cljont-sicllnauthonigedFycention(6o))SSthis->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh'. ['team id' => Sclient-›qetConfiq(->qetTeam@->qetIdo'error' => $e->qetMessage(1);Scuient->ensureValidTokenos25A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console leu)# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-S0F"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSUbDomains: preload"),"access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server":["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545support Dally • In 3n 131100% 5• мon 11 May 11.4/:04AskJiminnyReportActivityServiceTest vCascadeHubspot Rate Limit Re+0 ..ReasonRateLimitException.phpRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int retry after) instead of arraySimpler: no policy to trackDrop policy from RateL1m1tException constructorMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceofMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAtter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iohs with delav 1-6c (chean evcles. all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch. no siob→>failo, no excention fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue cvcles per second per worken• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successtul calls/s — HubSoot's limit))• Same final outcome (29k succeed. 291k fail at T-30min)|MetricSuccessful jobs in 30minPrevious (this round)This round9,000Wasted HubSpot API calls~10,800Job pop cycles/sec~50-1009,000~10,800~100-250|Log entries (with sampling)~10000~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-cide throttlina3 files +73 -43>Ask anvthina (&4L)+ « CodeClaude Onus 4.7 MediumAccent alliW Windsurf Teams 26.52UTF.Afo 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16384
|
735
|
21
|
2026-05-11T08:47:54.983357+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489274983_m2.jpg...
|
Firefox
|
Jira — Work
|
1
|
jiminny.atlassian.net/browse/JY-20818?atlOrigin=ey jiminny.atlassian.net/browse/JY-20818?atlOrigin=eyJpIjoiMjYxZjc3ZTYwMGM1NGFjMTllODhhMGNjZTcwMWRkMDkiLCJwIjoiamlyYS1zbGFjay1pbnQifQ...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Transferring data from jiminny.atlassian.net…...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transferring data from jiminny.atlassian.net…","depth":5,"bounds":{"left":0.017453458,"top":0.9876297,"width":0.078125,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-2728087556583906449
|
3104334046619034242
|
visual_change
|
hybrid
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Transferring data from jiminny.atlassian.net…
FirefoxEditVIewHistory BookmarksPronllesToolsWindowHelpny.atlassian.net/browse/JY-20818?at|Origin=eyJpljoiMjYxZjc3ZTYwMGM1NGFiMTIIODhhMGNjZTcwMWRkMDkiLCJwljcsuppont Dally • In sh 13m100% 1• Mon 11 May 11:47:54+0 ..ninny@localhost]4 HS_local [jiminny@localhost]console [STAGING]INFO: [Hubspot] DEBUG Getting headers {21:15 GMT"],mson,charser=utt-oned"],-SOF"],"1,:"max-aqe=31536000* 1ncludeSubDomains: preload"]nCascadeHubSpot Rate Limit ReFileRateLimitException.phpentials": "false"].c=|"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\","nosniff"" •["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]|Wrtd0aXVr.kSAndas6h7VVKhzTn0BidvMaheCtmoV-1778163675-1.0.1.domain=.hubapi.com; Http0nly; Secure; SameSite=None"],cloudflane.com.nenont/v42c=NVA1cVTP0fVm32anS0axVF/sd2PMlc98-4541-b92a-adfa73b69eab".d4-9403-0e5b551e3545"}ReasonRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int (retry after) instead of arraySimpler: no policy to trackDrop policy from RateL1m1tException constructorMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceofMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. Cacheporulfted uect i -6 (l mir hoadts, fal trough to policy tale → retuins 600, (the DAL, LIMIT detauit lift in parschetryatter)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch, no siob->fail(. no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue evcles per second per worke• More cache hite ner cecond (cince cvclas are facter) = hut cache GFTe are chean (20 1mc)• Same throughout ceilina (5 successtul calls/s — HubSoot's limit)• Same final outcome (29k succeed. 291k fail at T-30min)MetricSuccessful jobs in 30minPrevious (this round)This round9,000Wasted HubSpot API calls~10,800Job pop cycles/sec~50-1009,000~10,800~100-250|Log entries (with sampling)0000.~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tchange the macro outcome.The fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-cide throttlina3 files +73 -43>Ask anvthina (&4L)+ « CodeClaude Onus 4.7 MediumAccent alliW Windsurf Teams 26.52UTF.Afo 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16385
|
735
|
22
|
2026-05-11T08:47:58.044177+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489278044_m2.jpg...
|
Firefox
|
Jira — Work
|
1
|
jiminny.atlassian.net/browse/JY-20818?atlOrigin=ey jiminny.atlassian.net/browse/JY-20818?atlOrigin=eyJpIjoiMjYxZjc3ZTYwMGM1NGFjMTllODhhMGNjZTcwMWRkMDkiLCJwIjoiamlyYS1zbGFjay1pbnQifQ...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"2 Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-309956733452181568
|
725549352464007826
|
visual_change
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you...
|
16384
|
NULL
|
NULL
|
NULL
|
|
16387
|
735
|
23
|
2026-05-11T08:48:03.164128+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489283164_m2.jpg...
|
Firefox
|
[JY-20818] Move Ask Jiminny reports to separated d [JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira — Work...
|
1
|
jiminny.atlassian.net/browse/JY-20818
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Bug - Change work type
JY-20818
JY-20818
Copy link
Move Ask Jiminny reports to separated datadog metric- Summary, edit
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Add Description, edit
Edit description
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
None
Actual outcome
More information about
Edit Actual outcome
Add text
Expected outcome
More information about
Edit Expected outcome
Add text
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Newest first Newest first
Newest first
Add a comment…
Can I get more info...?
Can I get more info...?
Status update...
Status update...
Thanks...
Thanks...
Pro tip:
press
M...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"2 Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.030751329,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.020113032,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.030751329,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.020113032,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.030751329,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.020113032,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.030751329,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.08959442,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.020113032,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.030751329,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.072972074,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.08228058,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.026097074,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.024102394,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.03474069,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.02543218,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.072972074,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.08228058,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.028091755,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.03873005,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.028091755,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.03873005,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.028091755,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.03873005,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.028091755,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.03873005,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.028091755,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.03873005,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.024102394,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.03474069,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.0909242,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.024102394,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.03474069,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.020113032,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.030751329,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.08959442,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.020113032,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.030751329,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.09158909,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.098902926,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.020113032,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.030751329,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.08959442,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.030751329,"top":0.5494813,"width":0.025764627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.55706304,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.56903434,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.030751329,"top":0.57501996,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.5826017,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.08028591,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.020113032,"top":0.60415006,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.030751329,"top":0.6101357,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.14744017,"top":0.0981644,"width":0.062333778,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.10787899,"top":0.10933759,"width":0.013962766,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.10787899,"top":0.11292897,"width":0.013962766,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.12367021,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New) Jiminny (New)","depth":15,"bounds":{"left":0.12915559,"top":0.10933759,"width":0.034574468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":17,"bounds":{"left":0.13646941,"top":0.11292897,"width":0.027260639,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.16555852,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Epic - Change parent","depth":15,"bounds":{"left":0.1690492,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-19240","depth":15,"bounds":{"left":0.17702793,"top":0.10933759,"width":0.017952127,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-19240","depth":17,"bounds":{"left":0.17702793,"top":0.11292897,"width":0.017952127,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.19680852,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Bug - Change work type","depth":15,"bounds":{"left":0.2002992,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20818","depth":15,"bounds":{"left":0.20827793,"top":0.10933759,"width":0.017952127,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818","depth":17,"bounds":{"left":0.20827793,"top":0.11292897,"width":0.017952127,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.22490026,"top":0.11213089,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Move Ask Jiminny reports to separated datadog metric- Summary, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Move Ask Jiminny reports to separated datadog metric","depth":11,"bounds":{"left":0.10854388,"top":0.1396648,"width":0.20561835,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Move Ask Jiminny reports to separated datadog metric","depth":12,"bounds":{"left":0.10854388,"top":0.13926576,"width":0.20561835,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or create work related to this Bug","depth":12,"bounds":{"left":0.10787899,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add or create work related to this Bug","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View app actions","depth":12,"bounds":{"left":0.12117686,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View app actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Key details Key details","depth":11,"bounds":{"left":0.09990027,"top":0.20989625,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Key details","depth":13,"bounds":{"left":0.09857048,"top":0.21308859,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Key details","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key details","depth":14,"bounds":{"left":0.10787899,"top":0.2150838,"width":0.02825798,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Description","depth":12,"bounds":{"left":0.10787899,"top":0.2386273,"width":0.025598405,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":13,"bounds":{"left":0.10787899,"top":0.23902634,"width":0.025598405,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Description, edit","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit description","depth":14,"bounds":{"left":0.10854388,"top":0.26256984,"width":0.034242023,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Steps to reproduce","depth":12,"bounds":{"left":0.10787899,"top":0.30127692,"width":0.042386968,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Steps to reproduce","depth":13,"bounds":{"left":0.10787899,"top":0.30207503,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.15159574,"top":0.30327216,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Steps to reproduce, edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":13,"bounds":{"left":0.10787899,"top":0.32521948,"width":0.011801862,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actual outcome","depth":13,"bounds":{"left":0.10787899,"top":0.3699122,"width":0.034906916,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.14677526,"top":0.37071028,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Actual outcome","depth":13,"bounds":{"left":0.21825133,"top":0.37669593,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.3699122,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expected outcome","depth":13,"bounds":{"left":0.10787899,"top":0.40822026,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.1534242,"top":0.40901837,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Expected outcome","depth":13,"bounds":{"left":0.21825133,"top":0.415004,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.40822026,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Subtasks","depth":11,"bounds":{"left":0.10787899,"top":0.46169195,"width":0.023936171,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Subtasks","depth":12,"bounds":{"left":0.10787899,"top":0.46169195,"width":0.023936171,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add subtask","depth":12,"bounds":{"left":0.10388963,"top":0.48244214,"width":0.035405584,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add subtask","depth":14,"bounds":{"left":0.10787899,"top":0.48802873,"width":0.027426861,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Linked work items","depth":11,"bounds":{"left":0.10787899,"top":0.5271349,"width":0.04654255,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linked work items","depth":12,"bounds":{"left":0.10787899,"top":0.5271349,"width":0.04654255,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add linked work item","depth":12,"bounds":{"left":0.10388963,"top":0.5462889,"width":0.05418883,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add linked work item","depth":14,"bounds":{"left":0.10787899,"top":0.5518755,"width":0.046210106,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Activity","depth":13,"bounds":{"left":0.10787899,"top":0.59098166,"width":0.019946808,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":14,"bounds":{"left":0.10787899,"top":0.59098166,"width":0.019946808,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All","depth":14,"bounds":{"left":0.10887633,"top":0.61252993,"width":0.01412899,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":16,"bounds":{"left":0.11319814,"top":0.61572224,"width":0.005485372,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comments","depth":14,"bounds":{"left":0.12367021,"top":0.61252993,"width":0.032413565,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comments","depth":16,"bounds":{"left":0.12799202,"top":0.61572224,"width":0.023769947,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"History","depth":14,"bounds":{"left":0.15674867,"top":0.61252993,"width":0.024268618,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":16,"bounds":{"left":0.16107048,"top":0.61572224,"width":0.015625,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Work log","depth":14,"bounds":{"left":0.18168218,"top":0.61252993,"width":0.02825798,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work log","depth":16,"bounds":{"left":0.18600398,"top":0.61572224,"width":0.019614361,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newest first Newest first","depth":13,"bounds":{"left":0.37599733,"top":0.61652035,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newest first","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add a comment…","depth":15,"bounds":{"left":0.12184176,"top":0.6564246,"width":0.26146942,"height":0.07182761},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Can I get more info...?","depth":17,"bounds":{"left":0.1278258,"top":0.69473267,"width":0.05718085,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Can I get more info...?","depth":19,"bounds":{"left":0.13181517,"top":0.6971269,"width":0.04920213,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status update...","depth":17,"bounds":{"left":0.18633644,"top":0.69473267,"width":0.04305186,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status update...","depth":19,"bounds":{"left":0.1903258,"top":0.6971269,"width":0.03507314,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Thanks...","depth":17,"bounds":{"left":0.23071809,"top":0.69473267,"width":0.028590426,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Thanks...","depth":19,"bounds":{"left":0.23470744,"top":0.6971269,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pro tip:","depth":16,"bounds":{"left":0.12117686,"top":0.7366321,"width":0.013796543,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"press","depth":15,"bounds":{"left":0.1349734,"top":0.7366321,"width":0.012632979,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"M","depth":17,"bounds":{"left":0.14893617,"top":0.73743016,"width":0.0034906915,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
2055553484871644913
|
6291932665470238868
|
click
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Bug - Change work type
JY-20818
JY-20818
Copy link
Move Ask Jiminny reports to separated datadog metric- Summary, edit
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Add Description, edit
Edit description
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
None
Actual outcome
More information about
Edit Actual outcome
Add text
Expected outcome
More information about
Edit Expected outcome
Add text
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Newest first Newest first
Newest first
Add a comment…
Can I get more info...?
Can I get more info...?
Status update...
Status update...
Thanks...
Thanks...
Pro tip:
press
M...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16389
|
735
|
24
|
2026-05-11T08:48:06.551429+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489286551_m2.jpg...
|
Firefox
|
[JY-20818] Move Ask Jiminny reports to separated d [JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira — Work...
|
1
|
jiminny.atlassian.net/browse/JY-20818
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"2 Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.030751329,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.020113032,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.030751329,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.020113032,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.030751329,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.020113032,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.030751329,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.08959442,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.020113032,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.030751329,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.072972074,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.08228058,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.026097074,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.024102394,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.03474069,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.02543218,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.072972074,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.08228058,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.028091755,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.03873005,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.028091755,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.03873005,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.028091755,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.03873005,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.028091755,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.03873005,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.028091755,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.03873005,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.024102394,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.03474069,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.0909242,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.024102394,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.03474069,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.020113032,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.030751329,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.08959442,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.020113032,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.030751329,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.09158909,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.098902926,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.020113032,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.030751329,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.08959442,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
3436209678924895159
|
221115426518979598
|
click
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)...
|
16387
|
NULL
|
NULL
|
NULL
|
|
16391
|
735
|
25
|
2026-05-11T08:48:19.502636+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489299502_m2.jpg...
|
Firefox
|
[JY-20818] Move Ask Jiminny reports to separated d [JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira — Work...
|
1
|
jiminny.atlassian.net/browse/JY-20818
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Bug - Change work type
JY-20818
JY-20818
Copy link
Move Ask Jiminny reports to separated datadog metric- Summary, edit
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Add or create work related to this Bug...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"2 Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.030751329,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.020113032,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.030751329,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.020113032,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.030751329,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.020113032,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.030751329,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.08959442,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.020113032,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.030751329,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.072972074,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.08228058,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.026097074,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.024102394,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.03474069,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.02543218,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.072972074,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.08228058,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.028091755,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.03873005,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.028091755,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.03873005,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.028091755,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.03873005,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.028091755,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.03873005,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.028091755,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.03873005,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.024102394,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.03474069,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.0909242,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.024102394,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.03474069,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.020113032,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.030751329,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.08959442,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.020113032,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.030751329,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.09158909,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.098902926,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.020113032,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.030751329,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.08959442,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.030751329,"top":0.5494813,"width":0.025764627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.55706304,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.56903434,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.030751329,"top":0.57501996,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.5826017,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.08028591,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.020113032,"top":0.60415006,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.030751329,"top":0.6101357,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.14744017,"top":0.0981644,"width":0.062333778,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.10787899,"top":0.10933759,"width":0.013962766,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.10787899,"top":0.11292897,"width":0.013962766,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.12367021,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New) Jiminny (New)","depth":15,"bounds":{"left":0.12915559,"top":0.10933759,"width":0.034574468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":17,"bounds":{"left":0.13646941,"top":0.11292897,"width":0.027260639,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.16555852,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Epic - Change parent","depth":15,"bounds":{"left":0.1690492,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-19240","depth":15,"bounds":{"left":0.17702793,"top":0.10933759,"width":0.017952127,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-19240","depth":17,"bounds":{"left":0.17702793,"top":0.11292897,"width":0.017952127,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.19680852,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Bug - Change work type","depth":15,"bounds":{"left":0.2002992,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20818","depth":15,"bounds":{"left":0.20827793,"top":0.10933759,"width":0.017952127,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818","depth":17,"bounds":{"left":0.20827793,"top":0.11292897,"width":0.017952127,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.22490026,"top":0.11213089,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Move Ask Jiminny reports to separated datadog metric- Summary, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Move Ask Jiminny reports to separated datadog metric","depth":11,"bounds":{"left":0.10854388,"top":0.1396648,"width":0.20561835,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Move Ask Jiminny reports to separated datadog metric","depth":12,"bounds":{"left":0.10854388,"top":0.13926576,"width":0.20561835,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or create work related to this Bug","depth":12,"bounds":{"left":0.10787899,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-9128358975407370971
|
1662231977547649068
|
click
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Bug - Change work type
JY-20818
JY-20818
Copy link
Move Ask Jiminny reports to separated datadog metric- Summary, edit
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Add or create work related to this Bug...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16393
|
735
|
26
|
2026-05-11T08:48:28.672525+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489308672_m2.jpg...
|
Firefox
|
[JY-20818] Move Ask Jiminny reports to separated d [JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira — Work...
|
1
|
jiminny.atlassian.net/browse/JY-20818
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Bug - Change work type
JY-20818
JY-20818
Copy link
Move Ask Jiminny reports to separated datadog metric- Summary, edit
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Add Description, edit
Edit description
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
None
Actual outcome
More information about
Edit Actual outcome
Add text
Expected outcome
More information about
Edit Expected outcome
Add text
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Newest first Newest first
Newest first
Add a comment…
Can I get more info...?
Can I get more info...?
Status update...
Status update...
Thanks...
Thanks...
Pro tip:
press
M
to comment
Resize work item view side panel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"2 Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.030751329,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.020113032,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.030751329,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.020113032,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.030751329,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.020113032,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.030751329,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.08959442,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.020113032,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.030751329,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.072972074,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.08228058,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.026097074,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.024102394,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.03474069,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.02543218,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.072972074,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.08228058,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.028091755,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.03873005,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.028091755,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.03873005,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.028091755,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.03873005,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.028091755,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.03873005,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.028091755,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.03873005,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.024102394,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.03474069,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.0909242,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.024102394,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.03474069,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.020113032,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.030751329,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.08959442,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.020113032,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.030751329,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.09158909,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.098902926,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.020113032,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.030751329,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.08959442,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.030751329,"top":0.5494813,"width":0.025764627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.55706304,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.56903434,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.030751329,"top":0.57501996,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.5826017,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.08028591,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.020113032,"top":0.60415006,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.030751329,"top":0.6101357,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.14744017,"top":0.0981644,"width":0.062333778,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.10787899,"top":0.10933759,"width":0.013962766,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.10787899,"top":0.11292897,"width":0.013962766,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.12367021,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New) Jiminny (New)","depth":15,"bounds":{"left":0.12915559,"top":0.10933759,"width":0.034574468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":17,"bounds":{"left":0.13646941,"top":0.11292897,"width":0.027260639,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.16555852,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Epic - Change parent","depth":15,"bounds":{"left":0.1690492,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-19240","depth":15,"bounds":{"left":0.17702793,"top":0.10933759,"width":0.017952127,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-19240","depth":17,"bounds":{"left":0.17702793,"top":0.11292897,"width":0.017952127,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.19680852,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Bug - Change work type","depth":15,"bounds":{"left":0.2002992,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20818","depth":15,"bounds":{"left":0.20827793,"top":0.10933759,"width":0.017952127,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818","depth":17,"bounds":{"left":0.20827793,"top":0.11292897,"width":0.017952127,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.22490026,"top":0.11213089,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Move Ask Jiminny reports to separated datadog metric- Summary, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Move Ask Jiminny reports to separated datadog metric","depth":11,"bounds":{"left":0.10854388,"top":0.1396648,"width":0.20561835,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Move Ask Jiminny reports to separated datadog metric","depth":12,"bounds":{"left":0.10854388,"top":0.13926576,"width":0.20561835,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or create work related to this Bug","depth":12,"bounds":{"left":0.10787899,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add or create work related to this Bug","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View app actions","depth":12,"bounds":{"left":0.12117686,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View app actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Key details Key details","depth":11,"bounds":{"left":0.09990027,"top":0.20989625,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Key details","depth":13,"bounds":{"left":0.09857048,"top":0.21308859,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Key details","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key details","depth":14,"bounds":{"left":0.10787899,"top":0.2150838,"width":0.02825798,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Description","depth":12,"bounds":{"left":0.10787899,"top":0.2386273,"width":0.025598405,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":13,"bounds":{"left":0.10787899,"top":0.23902634,"width":0.025598405,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Description, edit","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit description","depth":14,"bounds":{"left":0.10854388,"top":0.26256984,"width":0.034242023,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Steps to reproduce","depth":12,"bounds":{"left":0.10787899,"top":0.30127692,"width":0.042386968,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Steps to reproduce","depth":13,"bounds":{"left":0.10787899,"top":0.30207503,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.15159574,"top":0.30327216,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Steps to reproduce, edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":13,"bounds":{"left":0.10787899,"top":0.32521948,"width":0.011801862,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actual outcome","depth":13,"bounds":{"left":0.10787899,"top":0.3699122,"width":0.034906916,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.14677526,"top":0.37071028,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Actual outcome","depth":13,"bounds":{"left":0.21825133,"top":0.37669593,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.3699122,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expected outcome","depth":13,"bounds":{"left":0.10787899,"top":0.40822026,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.1534242,"top":0.40901837,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Expected outcome","depth":13,"bounds":{"left":0.21825133,"top":0.415004,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.40822026,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Subtasks","depth":11,"bounds":{"left":0.10787899,"top":0.46169195,"width":0.023936171,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Subtasks","depth":12,"bounds":{"left":0.10787899,"top":0.46169195,"width":0.023936171,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add subtask","depth":12,"bounds":{"left":0.10388963,"top":0.48244214,"width":0.035405584,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add subtask","depth":14,"bounds":{"left":0.10787899,"top":0.48802873,"width":0.027426861,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Linked work items","depth":11,"bounds":{"left":0.10787899,"top":0.5271349,"width":0.04654255,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linked work items","depth":12,"bounds":{"left":0.10787899,"top":0.5271349,"width":0.04654255,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add linked work item","depth":12,"bounds":{"left":0.10388963,"top":0.5462889,"width":0.05418883,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add linked work item","depth":14,"bounds":{"left":0.10787899,"top":0.5518755,"width":0.046210106,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Activity","depth":13,"bounds":{"left":0.10787899,"top":0.59098166,"width":0.019946808,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":14,"bounds":{"left":0.10787899,"top":0.59098166,"width":0.019946808,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All","depth":14,"bounds":{"left":0.10887633,"top":0.61252993,"width":0.01412899,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":16,"bounds":{"left":0.11319814,"top":0.61572224,"width":0.005485372,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comments","depth":14,"bounds":{"left":0.12367021,"top":0.61252993,"width":0.032413565,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comments","depth":16,"bounds":{"left":0.12799202,"top":0.61572224,"width":0.023769947,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"History","depth":14,"bounds":{"left":0.15674867,"top":0.61252993,"width":0.024268618,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":16,"bounds":{"left":0.16107048,"top":0.61572224,"width":0.015625,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Work log","depth":14,"bounds":{"left":0.18168218,"top":0.61252993,"width":0.02825798,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work log","depth":16,"bounds":{"left":0.18600398,"top":0.61572224,"width":0.019614361,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newest first Newest first","depth":13,"bounds":{"left":0.37599733,"top":0.61652035,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newest first","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add a comment…","depth":15,"bounds":{"left":0.12184176,"top":0.6564246,"width":0.26146942,"height":0.07182761},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Can I get more info...?","depth":17,"bounds":{"left":0.1278258,"top":0.69473267,"width":0.05718085,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Can I get more info...?","depth":19,"bounds":{"left":0.13181517,"top":0.6971269,"width":0.04920213,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status update...","depth":17,"bounds":{"left":0.18633644,"top":0.69473267,"width":0.04305186,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status update...","depth":19,"bounds":{"left":0.1903258,"top":0.6971269,"width":0.03507314,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Thanks...","depth":17,"bounds":{"left":0.23071809,"top":0.69473267,"width":0.028590426,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Thanks...","depth":19,"bounds":{"left":0.23470744,"top":0.6971269,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pro tip:","depth":16,"bounds":{"left":0.12117686,"top":0.7366321,"width":0.013796543,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"press","depth":15,"bounds":{"left":0.1349734,"top":0.7366321,"width":0.012632979,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"M","depth":17,"bounds":{"left":0.14893617,"top":0.73743016,"width":0.0034906915,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to comment","depth":15,"bounds":{"left":0.15375665,"top":0.7366321,"width":0.023603724,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize work item view side panel","depth":12,"bounds":{"left":0.44398272,"top":0.0981644,"width":0.07263963,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-8434267465802270787
|
6291932390592200852
|
click
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Bug - Change work type
JY-20818
JY-20818
Copy link
Move Ask Jiminny reports to separated datadog metric- Summary, edit
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Add Description, edit
Edit description
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
None
Actual outcome
More information about
Edit Actual outcome
Add text
Expected outcome
More information about
Edit Expected outcome
Add text
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Newest first Newest first
Newest first
Add a comment…
Can I get more info...?
Can I get more info...?
Status update...
Status update...
Thanks...
Thanks...
Pro tip:
press
M
to comment
Resize work item view side panel...
|
16391
|
NULL
|
NULL
|
NULL
|
|
16395
|
735
|
27
|
2026-05-11T08:48:34.117876+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489314117_m2.jpg...
|
Firefox
|
[JY-20818] Move Ask Jiminny reports to separated d [JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira — Work...
|
1
|
jiminny.atlassian.net/browse/JY-20818
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Bug - Change work type
JY-20818
JY-20818
Copy link
Move Ask Jiminny reports to separated datadog metric- Summary, edit
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Add Description, edit
Edit description
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
None
Actual outcome
More information about
Edit Actual outcome
Add text
Expected outcome
More information about
Edit Expected outcome
Add text
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Newest first Newest first
Newest first...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"2 Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"2 Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.030751329,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.020113032,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.030751329,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.020113032,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.030751329,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.020113032,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.030751329,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.08959442,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.020113032,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.030751329,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.072972074,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.08228058,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.026097074,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.024102394,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.03474069,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.02543218,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.072972074,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.08228058,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.028091755,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.03873005,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.028091755,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.03873005,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.028091755,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.03873005,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.028091755,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.03873005,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.028091755,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.03873005,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.024102394,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.03474069,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.0909242,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.024102394,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.03474069,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.020113032,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.030751329,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.08959442,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.020113032,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.030751329,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.09158909,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.098902926,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.020113032,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.030751329,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.08959442,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.030751329,"top":0.5494813,"width":0.025764627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.55706304,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.56903434,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.030751329,"top":0.57501996,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.5826017,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.08028591,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.020113032,"top":0.60415006,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.030751329,"top":0.6101357,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.14744017,"top":0.0981644,"width":0.062333778,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.10787899,"top":0.10933759,"width":0.013962766,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.10787899,"top":0.11292897,"width":0.013962766,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.12367021,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New) Jiminny (New)","depth":15,"bounds":{"left":0.12915559,"top":0.10933759,"width":0.034574468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":17,"bounds":{"left":0.13646941,"top":0.11292897,"width":0.027260639,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.16555852,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Epic - Change parent","depth":15,"bounds":{"left":0.1690492,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-19240","depth":15,"bounds":{"left":0.17702793,"top":0.10933759,"width":0.017952127,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-19240","depth":17,"bounds":{"left":0.17702793,"top":0.11292897,"width":0.017952127,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.19680852,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Bug - Change work type","depth":15,"bounds":{"left":0.2002992,"top":0.10933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20818","depth":15,"bounds":{"left":0.20827793,"top":0.10933759,"width":0.017952127,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818","depth":17,"bounds":{"left":0.20827793,"top":0.11292897,"width":0.017952127,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.22490026,"top":0.11213089,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Move Ask Jiminny reports to separated datadog metric- Summary, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Move Ask Jiminny reports to separated datadog metric","depth":11,"bounds":{"left":0.10854388,"top":0.1396648,"width":0.20561835,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Move Ask Jiminny reports to separated datadog metric","depth":12,"bounds":{"left":0.10854388,"top":0.13926576,"width":0.20561835,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or create work related to this Bug","depth":12,"bounds":{"left":0.10787899,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add or create work related to this Bug","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View app actions","depth":12,"bounds":{"left":0.12117686,"top":0.17158818,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View app actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Key details Key details","depth":11,"bounds":{"left":0.09990027,"top":0.20989625,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Key details","depth":13,"bounds":{"left":0.09857048,"top":0.21308859,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Key details","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key details","depth":14,"bounds":{"left":0.10787899,"top":0.2150838,"width":0.02825798,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Description","depth":12,"bounds":{"left":0.10787899,"top":0.2386273,"width":0.025598405,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":13,"bounds":{"left":0.10787899,"top":0.23902634,"width":0.025598405,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Description, edit","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit description","depth":14,"bounds":{"left":0.10854388,"top":0.26256984,"width":0.034242023,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Steps to reproduce","depth":12,"bounds":{"left":0.10787899,"top":0.30127692,"width":0.042386968,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Steps to reproduce","depth":13,"bounds":{"left":0.10787899,"top":0.30207503,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.15159574,"top":0.30327216,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Steps to reproduce, edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":13,"bounds":{"left":0.10787899,"top":0.32521948,"width":0.011801862,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actual outcome","depth":13,"bounds":{"left":0.10787899,"top":0.3699122,"width":0.034906916,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.14677526,"top":0.37071028,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Actual outcome","depth":13,"bounds":{"left":0.21825133,"top":0.37669593,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.3699122,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expected outcome","depth":13,"bounds":{"left":0.10787899,"top":0.40822026,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.1534242,"top":0.40901837,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Expected outcome","depth":13,"bounds":{"left":0.21825133,"top":0.415004,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.40822026,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Subtasks","depth":11,"bounds":{"left":0.10787899,"top":0.46169195,"width":0.023936171,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Subtasks","depth":12,"bounds":{"left":0.10787899,"top":0.46169195,"width":0.023936171,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add subtask","depth":12,"bounds":{"left":0.10388963,"top":0.48244214,"width":0.035405584,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add subtask","depth":14,"bounds":{"left":0.10787899,"top":0.48802873,"width":0.027426861,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Linked work items","depth":11,"bounds":{"left":0.10787899,"top":0.5271349,"width":0.04654255,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linked work items","depth":12,"bounds":{"left":0.10787899,"top":0.5271349,"width":0.04654255,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add linked work item","depth":12,"bounds":{"left":0.10388963,"top":0.5462889,"width":0.05418883,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add linked work item","depth":14,"bounds":{"left":0.10787899,"top":0.5518755,"width":0.046210106,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Activity","depth":13,"bounds":{"left":0.10787899,"top":0.59098166,"width":0.019946808,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":14,"bounds":{"left":0.10787899,"top":0.59098166,"width":0.019946808,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All","depth":14,"bounds":{"left":0.10887633,"top":0.61252993,"width":0.01412899,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":16,"bounds":{"left":0.11319814,"top":0.61572224,"width":0.005485372,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comments","depth":14,"bounds":{"left":0.12367021,"top":0.61252993,"width":0.032413565,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comments","depth":16,"bounds":{"left":0.12799202,"top":0.61572224,"width":0.023769947,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"History","depth":14,"bounds":{"left":0.15674867,"top":0.61252993,"width":0.024268618,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":16,"bounds":{"left":0.16107048,"top":0.61572224,"width":0.015625,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Work log","depth":14,"bounds":{"left":0.18168218,"top":0.61252993,"width":0.02825798,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work log","depth":16,"bounds":{"left":0.18600398,"top":0.61572224,"width":0.019614361,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newest first Newest first","depth":13,"bounds":{"left":0.37599733,"top":0.61652035,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newest first","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-6438706502695306697
|
6292073128080556276
|
click
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
2 Notifications
2 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Bug - Change work type
JY-20818
JY-20818
Copy link
Move Ask Jiminny reports to separated datadog metric- Summary, edit
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Add Description, edit
Edit description
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
None
Actual outcome
More information about
Edit Actual outcome
Add text
Expected outcome
More information about
Edit Expected outcome
Add text
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Newest first Newest first
Newest first...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16397
|
735
|
28
|
2026-05-11T08:48:43.846351+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489323846_m2.jpg...
|
Firefox
|
[JY-20818] Move Ask Jiminny reports to separated d [JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira — Work...
|
1
|
jiminny.atlassian.net/browse/JY-20818
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Notifications
Notifications
Only show unread
Only show unread
Open notifications in a new tab
more
Direct
Direct
Watching
Watching
Today
Today
Nikolay Yankov changed a bug from Code Review to Deployed 2 hours ago
More information about this user
Nikolay Yankov changed a bug from Code Review to Deployed2 hours ago
Nikolay Yankov changed a bug from Code Review to Deployed
2 hours ago
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
JY-20818 • Deployed
JY-20818 • Deployed
Mark as read
+1 update from Galya Dimitrova
+1 update from Galya Dimitrova
Older
Older
Galya Dimitrova assigned a bug to you 2 weeks ago
More information about this user
Galya Dimitrova assigned a bug to you2 weeks ago
Galya Dimitrova assigned a bug to you
2 weeks ago
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
JY-20725 • Backlog
JY-20725 • Backlog
Mark as read
Stefka Stoyanova updated a story 2 weeks ago
More information about this user
Stefka Stoyanova updated a story2 weeks ago
Stefka Stoyanova updated a story
2 weeks ago
Send email notification when the report is not generated
Send email notification when the report is not generated
JY-20157 • Deployed
JY-20157 • Deployed
Mark as read
+6 updates from Stefka Stoyanova and others
+6 updates from Stefka Stoyanova and others
Stefka Stoyanova changed a story from Ready for Deployment to Deployed 2 weeks ago
More information about this user
Stefka Stoyanova changed a story from Ready for Deployment to Deployed2 weeks ago
Stefka Stoyanova changed a story from Ready for Deployment to Deployed
2 weeks ago
Notify a user before the AJ Report expires
Notify a user before the AJ Report expires
JY-20508 • Deployed
JY-20508 • Deployed
Mark as read
+4 updates from Stefka Stoyanova and others
+4 updates from Stefka Stoyanova and others
Aneliya Angelova assigned a work item to you 2 weeks ago
More information about this user
Aneliya Angelova assigned a work item to you2 weeks ago
Aneliya Angelova assigned a work item to you
2 weeks ago
Daily reports can skip a day
Daily reports can skip a day
JY-20769 • Ready for Dev
JY-20769 • Ready for Dev
Mark as read
Aneliya Angelova changed a work item from Ready for Dev to Done 2 weeks ago
More information about this user
Aneliya Angelova changed a work item from Ready for Dev to Done2 weeks ago
Aneliya Angelova changed a work item from Ready for Dev to Done
2 weeks ago
Duplicate reports and emails are generated for a single report execution
Duplicate reports and emails are generated for a single report execution
JY-20747 • Done
JY-20747 • Done
Mark as read
+1 assignee update from Aneliya Angelova
+1 assignee update from Aneliya Angelova
Aneliya Angelova assigned a work item to you 2 weeks ago
More information about this user
Aneliya Angelova assigned a work item to you2 weeks ago
Aneliya Angelova assigned a work item to you
2 weeks ago
Weekly report is generated from Sunday to Saturday instead of Monday - Sunday
Weekly report is generated from Sunday to Saturday instead of Monday - Sunday
JY-20762 • Ready for Dev
JY-20762 • Ready for Dev
Mark as read
Nikolay Yankov changed a subtask from Ready for Dev to Done 3 weeks ago
More information about this user
Nikolay Yankov changed a subtask from Ready for Dev to Done3 weeks ago
Nikolay Yankov changed a subtask from Ready for Dev to Done
3 weeks ago
[BE] Endpoint for "I'm interested"
[BE] Endpoint for "I'm interested"
JY-20674 • Done
JY-20674 • Done
Mark as read
+1 assignee update from Nikolay Yankov
+1 assignee update from Nikolay Yankov
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.027759308,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Notifications","depth":14,"bounds":{"left":0.2883976,"top":0.11053472,"width":0.048204787,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Notifications","depth":15,"bounds":{"left":0.2883976,"top":0.110135674,"width":0.048204787,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only show unread","depth":15,"bounds":{"left":0.37367022,"top":0.114924185,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Only show unread","depth":15,"bounds":{"left":0.4167221,"top":0.11731844,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open notifications in a new tab","depth":15,"bounds":{"left":0.43134972,"top":0.108938545,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"more","depth":14,"bounds":{"left":0.44398272,"top":0.108938545,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Direct","depth":17,"bounds":{"left":0.28573802,"top":0.14724661,"width":0.01861702,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Direct","depth":19,"bounds":{"left":0.2883976,"top":0.15323225,"width":0.013297873,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Watching","depth":17,"bounds":{"left":0.30435506,"top":0.14724661,"width":0.026263298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Watching","depth":19,"bounds":{"left":0.3070146,"top":0.15323225,"width":0.020944148,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Today","depth":18,"bounds":{"left":0.2883976,"top":0.1859537,"width":0.011801862,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Today","depth":19,"bounds":{"left":0.2883976,"top":0.18635276,"width":0.011801862,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Nikolay Yankov changed a bug from Code Review to Deployed 2 hours ago","depth":22,"bounds":{"left":0.28573802,"top":0.20869912,"width":0.16888298,"height":0.114924185},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.2883976,"top":0.23743017,"width":0.01462766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Nikolay Yankov changed a bug from Code Review to Deployed2 hours ago","depth":22,"bounds":{"left":0.30568483,"top":0.2150838,"width":0.1356383,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov changed a bug from Code Review to Deployed","depth":23,"bounds":{"left":0.30568483,"top":0.21628092,"width":0.11569149,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 hours ago","depth":23,"bounds":{"left":0.328125,"top":0.23224261,"width":0.026097074,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Move Ask Jiminny reports to separated datadog metric","depth":22,"bounds":{"left":0.30568483,"top":0.24700718,"width":0.12599733,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Move Ask Jiminny reports to separated datadog metric","depth":25,"bounds":{"left":0.31100398,"top":0.2482043,"width":0.120678194,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20818 • Deployed","depth":22,"bounds":{"left":0.30568483,"top":0.26296887,"width":0.040226065,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818 • Deployed","depth":24,"bounds":{"left":0.30568483,"top":0.26496407,"width":0.040226065,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.44132313,"top":0.2150838,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+1 update from Galya Dimitrova","depth":23,"bounds":{"left":0.31698802,"top":0.29169992,"width":0.06898271,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+1 update from Galya Dimitrova","depth":25,"bounds":{"left":0.31698802,"top":0.29289705,"width":0.06898271,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Older","depth":18,"bounds":{"left":0.2883976,"top":0.3367917,"width":0.010472074,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Older","depth":19,"bounds":{"left":0.2883976,"top":0.33719075,"width":0.010472074,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Galya Dimitrova assigned a bug to you 2 weeks ago","depth":22,"bounds":{"left":0.28573802,"top":0.35953712,"width":0.16888298,"height":0.07661612},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.2883976,"top":0.38826814,"width":0.01462766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Galya Dimitrova assigned a bug to you2 weeks ago","depth":22,"bounds":{"left":0.30568483,"top":0.3659218,"width":0.1356383,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Galya Dimitrova assigned a bug to you","depth":23,"bounds":{"left":0.30568483,"top":0.36711892,"width":0.08510638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 weeks ago","depth":23,"bounds":{"left":0.39212102,"top":0.36711892,"width":0.027925532,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":22,"bounds":{"left":0.30568483,"top":0.38188347,"width":0.1356383,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":25,"bounds":{"left":0.31100398,"top":0.3830806,"width":0.122340426,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20725 • Backlog","depth":22,"bounds":{"left":0.30568483,"top":0.41380686,"width":0.037898935,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 • Backlog","depth":24,"bounds":{"left":0.30568483,"top":0.41580206,"width":0.037898935,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.44132313,"top":0.3659218,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Stefka Stoyanova updated a story 2 weeks ago","depth":22,"bounds":{"left":0.28573802,"top":0.44892257,"width":0.16888298,"height":0.09896249},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.2883976,"top":0.47765362,"width":0.01462766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Stefka Stoyanova updated a story2 weeks ago","depth":22,"bounds":{"left":0.30568483,"top":0.45530728,"width":0.1356383,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stefka Stoyanova updated a story","depth":23,"bounds":{"left":0.30568483,"top":0.45650437,"width":0.07496676,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 weeks ago","depth":23,"bounds":{"left":0.38198137,"top":0.45650437,"width":0.027925532,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Send email notification when the report is not generated","depth":22,"bounds":{"left":0.30568483,"top":0.47126895,"width":0.12882313,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send email notification when the report is not generated","depth":25,"bounds":{"left":0.31100398,"top":0.47246608,"width":0.12350399,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20157 • Deployed","depth":22,"bounds":{"left":0.30568483,"top":0.48723066,"width":0.039893616,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20157 • Deployed","depth":24,"bounds":{"left":0.30568483,"top":0.48922586,"width":0.039893616,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.44132313,"top":0.45530728,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+6 updates from Stefka Stoyanova and others","depth":23,"bounds":{"left":0.33294547,"top":0.5159617,"width":0.10106383,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+6 updates from Stefka Stoyanova and others","depth":25,"bounds":{"left":0.33294547,"top":0.5171588,"width":0.10106383,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Stefka Stoyanova changed a story from Ready for Deployment to Deployed 2 weeks ago","depth":22,"bounds":{"left":0.28573802,"top":0.5606544,"width":0.16888298,"height":0.114924185},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.2883976,"top":0.58938545,"width":0.01462766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Stefka Stoyanova changed a story from Ready for Deployment to Deployed2 weeks ago","depth":22,"bounds":{"left":0.30568483,"top":0.56703913,"width":0.1356383,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stefka Stoyanova changed a story from Ready for Deployment to Deployed","depth":23,"bounds":{"left":0.30568483,"top":0.56823623,"width":0.11037234,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 weeks ago","depth":23,"bounds":{"left":0.3617021,"top":0.58419794,"width":0.027925532,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notify a user before the AJ Report expires","depth":22,"bounds":{"left":0.30568483,"top":0.5989625,"width":0.09790558,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notify a user before the AJ Report expires","depth":25,"bounds":{"left":0.31100398,"top":0.60015965,"width":0.092586435,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20508 • Deployed","depth":22,"bounds":{"left":0.30568483,"top":0.6149242,"width":0.04105718,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20508 • Deployed","depth":24,"bounds":{"left":0.30568483,"top":0.6169194,"width":0.04105718,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.44132313,"top":0.56703913,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+4 updates from Stefka Stoyanova and others","depth":23,"bounds":{"left":0.33294547,"top":0.64365524,"width":0.101230055,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+4 updates from Stefka Stoyanova and others","depth":25,"bounds":{"left":0.33294547,"top":0.64485234,"width":0.101230055,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Aneliya Angelova assigned a work item to you 2 weeks ago","depth":22,"bounds":{"left":0.28573802,"top":0.68834794,"width":0.16888298,"height":0.060654428},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.2883976,"top":0.717079,"width":0.01462766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Aneliya Angelova assigned a work item to you2 weeks ago","depth":22,"bounds":{"left":0.30568483,"top":0.69473267,"width":0.1356383,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Aneliya Angelova assigned a work item to you","depth":23,"bounds":{"left":0.30568483,"top":0.69592977,"width":0.10206117,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 weeks ago","depth":23,"bounds":{"left":0.4090758,"top":0.69592977,"width":0.027759308,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Daily reports can skip a day","depth":22,"bounds":{"left":0.30568483,"top":0.7106943,"width":0.06615692,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Daily reports can skip a day","depth":25,"bounds":{"left":0.31100398,"top":0.7118915,"width":0.060837764,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20769 • Ready for Dev","depth":22,"bounds":{"left":0.30568483,"top":0.726656,"width":0.049534574,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20769 • Ready for Dev","depth":24,"bounds":{"left":0.30568483,"top":0.7286512,"width":0.049534574,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.44132313,"top":0.69473267,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Aneliya Angelova changed a work item from Ready for Dev to Done 2 weeks ago","depth":22,"bounds":{"left":0.28573802,"top":0.76177174,"width":0.16888298,"height":0.13088587},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.2883976,"top":0.7905028,"width":0.01462766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Aneliya Angelova changed a work item from Ready for Dev to Done2 weeks ago","depth":22,"bounds":{"left":0.30568483,"top":0.7681564,"width":0.1356383,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Aneliya Angelova changed a work item from Ready for Dev to Done","depth":23,"bounds":{"left":0.30568483,"top":0.76935357,"width":0.13048537,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 weeks ago","depth":23,"bounds":{"left":0.32430187,"top":0.7853152,"width":0.027925532,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Duplicate reports and emails are generated for a single report execution","depth":22,"bounds":{"left":0.30568483,"top":0.8000798,"width":0.1356383,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Duplicate reports and emails are generated for a single report execution","depth":25,"bounds":{"left":0.31100398,"top":0.8012769,"width":0.12051197,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20747 • Done","depth":22,"bounds":{"left":0.30568483,"top":0.8320032,"width":0.032579787,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20747 • Done","depth":24,"bounds":{"left":0.30568483,"top":0.8339984,"width":0.032579787,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.44132313,"top":0.7681564,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+1 assignee update from Aneliya Angelova","depth":23,"bounds":{"left":0.31698802,"top":0.8607342,"width":0.093417555,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+1 assignee update from Aneliya Angelova","depth":25,"bounds":{"left":0.31698802,"top":0.8619314,"width":0.093417555,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Aneliya Angelova assigned a work item to you 2 weeks ago","depth":22,"bounds":{"left":0.28573802,"top":0.905427,"width":0.16888298,"height":0.07661612},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.2883976,"top":0.934158,"width":0.01462766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Aneliya Angelova assigned a work item to you2 weeks ago","depth":22,"bounds":{"left":0.30568483,"top":0.91181165,"width":0.1356383,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Aneliya Angelova assigned a work item to you","depth":23,"bounds":{"left":0.30568483,"top":0.91300875,"width":0.10206117,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 weeks ago","depth":23,"bounds":{"left":0.4090758,"top":0.91300875,"width":0.027759308,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Weekly report is generated from Sunday to Saturday instead of Monday - Sunday","depth":22,"bounds":{"left":0.30568483,"top":0.92777336,"width":0.1356383,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Weekly report is generated from Sunday to Saturday instead of Monday - Sunday","depth":25,"bounds":{"left":0.31100398,"top":0.92897046,"width":0.115192816,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20762 • Ready for Dev","depth":22,"bounds":{"left":0.30568483,"top":0.9596967,"width":0.049534574,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20762 • Ready for Dev","depth":24,"bounds":{"left":0.30568483,"top":0.9616919,"width":0.049534574,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.44132313,"top":0.91181165,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Nikolay Yankov changed a subtask from Ready for Dev to Done 3 weeks ago","depth":22,"bounds":{"left":0.28573802,"top":0.9948124,"width":0.16888298,"height":0.005187571},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.2883976,"top":1.0,"width":0.01462766,"height":-0.023543477},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Nikolay Yankov changed a subtask from Ready for Dev to Done3 weeks ago","depth":22,"bounds":{"left":0.30568483,"top":1.0,"width":0.1356383,"height":-0.0011970997},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov changed a subtask from Ready for Dev to Done","depth":23,"bounds":{"left":0.30568483,"top":1.0,"width":0.12699468,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3 weeks ago","depth":23,"bounds":{"left":0.31865028,"top":1.0,"width":0.027925532,"height":-0.018355966},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[BE] Endpoint for \"I'm interested\"","depth":22,"bounds":{"left":0.30568483,"top":1.0,"width":0.07912234,"height":-0.033120513},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[BE] Endpoint for \"I'm interested\"","depth":25,"bounds":{"left":0.31100398,"top":1.0,"width":0.073803194,"height":-0.034317613},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20674 • Done","depth":22,"bounds":{"left":0.30568483,"top":1.0,"width":0.032912236,"height":-0.04908216},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20674 • Done","depth":24,"bounds":{"left":0.30568483,"top":1.0,"width":0.032912236,"height":-0.051077366},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.44132313,"top":1.0,"width":0.010638298,"height":-0.0011970997},"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+1 assignee update from Nikolay Yankov","depth":23,"bounds":{"left":0.31698802,"top":1.0,"width":0.0887633,"height":-0.07781327},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+1 assignee update from Nikolay Yankov","depth":25,"bounds":{"left":0.31698802,"top":1.0,"width":0.0887633,"height":-0.07901037},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.030751329,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.020113032,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.030751329,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.020113032,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.030751329,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.020113032,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.030751329,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.08959442,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.020113032,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.030751329,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.072972074,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.08228058,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.026097074,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.024102394,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.03474069,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.02543218,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.072972074,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.08228058,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.028091755,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.03873005,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.028091755,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.03873005,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.028091755,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.03873005,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.028091755,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.03873005,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.028091755,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.03873005,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.024102394,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.03474069,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.0909242,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.024102394,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.03474069,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.020113032,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.030751329,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.08959442,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.020113032,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.030751329,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.09158909,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.098902926,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.020113032,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.030751329,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.08959442,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.030751329,"top":0.5494813,"width":0.025764627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.55706304,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.56903434,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
2912168177582573444
|
6701455519410902216
|
click
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20818] Move Ask Jiminny reports to separated datadog metric - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Notifications
Notifications
Only show unread
Only show unread
Open notifications in a new tab
more
Direct
Direct
Watching
Watching
Today
Today
Nikolay Yankov changed a bug from Code Review to Deployed 2 hours ago
More information about this user
Nikolay Yankov changed a bug from Code Review to Deployed2 hours ago
Nikolay Yankov changed a bug from Code Review to Deployed
2 hours ago
Move Ask Jiminny reports to separated datadog metric
Move Ask Jiminny reports to separated datadog metric
JY-20818 • Deployed
JY-20818 • Deployed
Mark as read
+1 update from Galya Dimitrova
+1 update from Galya Dimitrova
Older
Older
Galya Dimitrova assigned a bug to you 2 weeks ago
More information about this user
Galya Dimitrova assigned a bug to you2 weeks ago
Galya Dimitrova assigned a bug to you
2 weeks ago
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
JY-20725 • Backlog
JY-20725 • Backlog
Mark as read
Stefka Stoyanova updated a story 2 weeks ago
More information about this user
Stefka Stoyanova updated a story2 weeks ago
Stefka Stoyanova updated a story
2 weeks ago
Send email notification when the report is not generated
Send email notification when the report is not generated
JY-20157 • Deployed
JY-20157 • Deployed
Mark as read
+6 updates from Stefka Stoyanova and others
+6 updates from Stefka Stoyanova and others
Stefka Stoyanova changed a story from Ready for Deployment to Deployed 2 weeks ago
More information about this user
Stefka Stoyanova changed a story from Ready for Deployment to Deployed2 weeks ago
Stefka Stoyanova changed a story from Ready for Deployment to Deployed
2 weeks ago
Notify a user before the AJ Report expires
Notify a user before the AJ Report expires
JY-20508 • Deployed
JY-20508 • Deployed
Mark as read
+4 updates from Stefka Stoyanova and others
+4 updates from Stefka Stoyanova and others
Aneliya Angelova assigned a work item to you 2 weeks ago
More information about this user
Aneliya Angelova assigned a work item to you2 weeks ago
Aneliya Angelova assigned a work item to you
2 weeks ago
Daily reports can skip a day
Daily reports can skip a day
JY-20769 • Ready for Dev
JY-20769 • Ready for Dev
Mark as read
Aneliya Angelova changed a work item from Ready for Dev to Done 2 weeks ago
More information about this user
Aneliya Angelova changed a work item from Ready for Dev to Done2 weeks ago
Aneliya Angelova changed a work item from Ready for Dev to Done
2 weeks ago
Duplicate reports and emails are generated for a single report execution
Duplicate reports and emails are generated for a single report execution
JY-20747 • Done
JY-20747 • Done
Mark as read
+1 assignee update from Aneliya Angelova
+1 assignee update from Aneliya Angelova
Aneliya Angelova assigned a work item to you 2 weeks ago
More information about this user
Aneliya Angelova assigned a work item to you2 weeks ago
Aneliya Angelova assigned a work item to you
2 weeks ago
Weekly report is generated from Sunday to Saturday instead of Monday - Sunday
Weekly report is generated from Sunday to Saturday instead of Monday - Sunday
JY-20762 • Ready for Dev
JY-20762 • Ready for Dev
Mark as read
Nikolay Yankov changed a subtask from Ready for Dev to Done 3 weeks ago
More information about this user
Nikolay Yankov changed a subtask from Ready for Dev to Done3 weeks ago
Nikolay Yankov changed a subtask from Ready for Dev to Done
3 weeks ago
[BE] Endpoint for "I'm interested"
[BE] Endpoint for "I'm interested"
JY-20674 • Done
JY-20674 • Done
Mark as read
+1 assignee update from Nikolay Yankov
+1 assignee update from Nikolay Yankov
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)...
|
16395
|
NULL
|
NULL
|
NULL
|
|
16398
|
735
|
29
|
2026-05-11T08:48:47.507958+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489327507_m2.jpg...
|
Firefox
|
[JY-20725] [HubSpot] Optimise CRM rematching on de [JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira — Work...
|
1
|
jiminny.atlassian.net/browse/JY-20725?actionerId=7 jiminny.atlassian.net/browse/JY-20725?actionerId=712020%3Ae67fb6e1-5298-44c2-9101-05d96c6e3768&sourceType=assign...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Assets , (opens new window)
Assets
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-20285
JY-20285
/
Bug - Change work type
JY-20725
JY-20725
Copy link
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts- Summary, edit
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Add Description, edit
https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq
https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq
Turn on wrap
Copy as text
1
Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
2
{"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT","correlationId":"019db2b6-c (truncated...)
Check triggering jobs:
DeleteCrmEntityTrait
,
DetachActivityObject
,
VerifyActivityCrmTaskJob
Check logs:
'RematchActivityOnCrmObjectDetach'
Check whether the rate limiter
is used
in this case / is good enough:
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:calculateDelayInMicroseconds
Steps to reproduce
Steps to reproduce
Edit Steps to reproduce, edit
None
Actual outcome
Edit Actual outcome
Add text
Expected outcome
Edit Expected outcome
Add text
Collapse Subtasks Subtasks Work item actions Configure columns Create subtask
Collapse Subtasks
Collapse Subtasks
Subtasks
Work item actions
Work item actions
Configure columns
Configure columns
Create subtask
Create subtask
0
% Done
Work
Work
More actions for Work
More actions for Work
Priority
Priority
More actions for Priority
More actions for Priority
Story Points
Story Points
More actions for Story Points
More actions for Story Points
Assignee
Assignee
More actions for Assignee
More actions for Assignee
Status
Status
Status • Sort in ascending order
Status • Sort in ascending order
More actions for Status
More actions for Status
JY-20751 is not resolved
JY-20751
Add hardcoded delay DeleteCrmEntityTrait
Add hardcoded delay DeleteCrmEntityTrait
Medium
Unassigned
Ready for Dev - Change status
READY FOR DEV
JY-20752 is not resolved
JY-20752
Implement Rate limiter in Client
Implement Rate limiter in Client
Medium
Unassigned
Ready for Dev - Change status
READY FOR DEV
Work
Work
More actions for Work
More actions for Work
JY-20751 is not resolved
JY-20751
Add hardcoded delay DeleteCrmEntityTrait
Add hardcoded delay DeleteCrmEntityTrait
JY-20752 is not resolved
JY-20752
Implement Rate limiter in Client
Implement Rate limiter in Client
Priority
Priority
More actions for Priority
More actions for Priority
Medium
Medium
Story Points
Story Points
More actions for Story Points
More actions for Story Points
Assignee
Assignee
More actions for Assignee
More actions for Assignee
Unassigned
Unassigned
Status
Status
Status • Sort in ascending order
Status • Sort in ascending order
More actions for Status
More actions for Status
Ready for Dev - Change status
READY FOR DEV
Ready for Dev - Change status
READY FOR DEV
Collapse Linked work items Linked work items Link a work item
Collapse Linked work items
Collapse Linked work items
Linked work items
Link a work item
Link a work item
is duplicated by
is duplicated by
JY-20728 is not done
JY-20728
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Duplicate - Change status
DUPLICATE
Unlink work item
Collapse Activity Activity
Collapse Activity
Collapse Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Atlassian Intelligence Summarise
Summarise
Newest first Newest first
Newest first...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.027759308,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.030751329,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.020113032,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.030751329,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.020113032,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.030751329,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.020113032,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.030751329,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.08959442,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.020113032,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.030751329,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.072972074,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.08228058,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.026097074,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.024102394,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.03474069,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.02543218,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.072972074,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.08228058,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.028091755,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.03873005,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.028091755,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.03873005,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.028091755,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.03873005,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.028091755,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.03873005,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.028091755,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.03873005,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.024102394,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.03474069,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.0909242,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.024102394,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.03474069,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.020113032,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.030751329,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.08959442,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.020113032,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.030751329,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.09158909,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.098902926,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.020113032,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.030751329,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.08959442,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Assets , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Assets","depth":17,"bounds":{"left":0.030751329,"top":0.5494813,"width":0.01512633,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.55706304,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.56903434,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.030751329,"top":0.57501996,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.5826017,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.08028591,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.020113032,"top":0.60415006,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.030751329,"top":0.6101357,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.14744017,"top":0.0981644,"width":0.062333778,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.10787899,"top":0.0933759,"width":0.013962766,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.10787899,"top":0.09696728,"width":0.013962766,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.12367021,"top":0.09577015,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New) Jiminny (New)","depth":15,"bounds":{"left":0.12915559,"top":0.0933759,"width":0.034574468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":17,"bounds":{"left":0.13646941,"top":0.09696728,"width":0.027260639,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.16555852,"top":0.09577015,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Epic - Change parent","depth":15,"bounds":{"left":0.1690492,"top":0.0933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20285","depth":15,"bounds":{"left":0.17702793,"top":0.0933759,"width":0.018450798,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20285","depth":17,"bounds":{"left":0.17702793,"top":0.09696728,"width":0.018450798,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.19730718,"top":0.09577015,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Bug - Change work type","depth":15,"bounds":{"left":0.20079787,"top":0.0933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20725","depth":15,"bounds":{"left":0.2087766,"top":0.0933759,"width":0.018284574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725","depth":17,"bounds":{"left":0.2087766,"top":0.09696728,"width":0.018284574,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.22573139,"top":0.096169196,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts- Summary, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or create work related to this Bug","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add or create work related to this Bug","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View app actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View app actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Key details Key details","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Key details","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Key details","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key details","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Description","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Description, edit","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Turn on wrap","depth":15,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Copy as text","depth":16,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019db2b6-c (truncated...)","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Check triggering jobs:","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DeleteCrmEntityTrait","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DetachActivityObject","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VerifyActivityCrmTaskJob","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Check logs:","depth":14,"bounds":{"left":0.10854388,"top":0.0,"width":0.027260639,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'RematchActivityOnCrmObjectDetach'","depth":15,"bounds":{"left":0.13696809,"top":0.0,"width":0.0831117,"height":0.0131683955},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Check whether the rate limiter","depth":14,"bounds":{"left":0.10854388,"top":0.0,"width":0.067652926,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is used","depth":15,"bounds":{"left":0.17619681,"top":0.0,"width":0.016123671,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in this case / is good enough:","depth":14,"bounds":{"left":0.19232048,"top":0.0,"width":0.06582447,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:calculateDelayInMicroseconds","depth":15,"bounds":{"left":0.109707445,"top":0.0,"width":0.22722739,"height":0.0131683955},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Steps to reproduce","depth":12,"bounds":{"left":0.10787899,"top":0.021947326,"width":0.042386968,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Steps to reproduce","depth":13,"bounds":{"left":0.10787899,"top":0.022745412,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Steps to reproduce, edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":13,"bounds":{"left":0.10787899,"top":0.045889866,"width":0.011801862,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actual outcome","depth":13,"bounds":{"left":0.10787899,"top":0.0905826,"width":0.034906916,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Actual outcome","depth":13,"bounds":{"left":0.21825133,"top":0.09736632,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.0905826,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expected outcome","depth":13,"bounds":{"left":0.10787899,"top":0.12889066,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Expected outcome","depth":13,"bounds":{"left":0.21825133,"top":0.13567439,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.12889066,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Subtasks Subtasks Work item actions Configure columns Create subtask","depth":11,"bounds":{"left":0.09990027,"top":0.18076617,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Subtasks","depth":13,"bounds":{"left":0.09857048,"top":0.1839585,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Subtasks","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Subtasks","depth":14,"bounds":{"left":0.10787899,"top":0.18555467,"width":0.023936171,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Work item actions","depth":12,"bounds":{"left":0.35472074,"top":0.1839585,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Work item actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Configure columns","depth":13,"bounds":{"left":0.36402926,"top":0.18076617,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure columns","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create subtask","depth":13,"bounds":{"left":0.37599733,"top":0.1839585,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create subtask","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":14,"bounds":{"left":0.35821143,"top":0.20710295,"width":0.0029920214,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"% Done","depth":13,"bounds":{"left":0.36120346,"top":0.20710295,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Work","depth":19,"bounds":{"left":0.108211435,"top":0.22944932,"width":0.1627327,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Work","depth":22,"bounds":{"left":0.11087101,"top":0.23902634,"width":0.010305851,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Work","depth":21,"bounds":{"left":0.26728722,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Work","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Priority","depth":19,"bounds":{"left":0.27094415,"top":0.22944932,"width":0.018949468,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority","depth":22,"bounds":{"left":0.27360374,"top":0.23902634,"width":0.014295213,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Priority","depth":21,"bounds":{"left":0.2862367,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Priority","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Story Points","depth":19,"bounds":{"left":0.28989363,"top":0.22944932,"width":0.02144282,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Story Points","depth":22,"bounds":{"left":0.2925532,"top":0.23902634,"width":0.023603724,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Story Points","depth":21,"bounds":{"left":0.30767953,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Story Points","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Assignee","depth":19,"bounds":{"left":0.31133643,"top":0.22944932,"width":0.018949468,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":22,"bounds":{"left":0.31399602,"top":0.23902634,"width":0.018118352,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Assignee","depth":21,"bounds":{"left":0.32662898,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Assignee","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Status","depth":19,"bounds":{"left":0.3302859,"top":0.22944932,"width":0.053357713,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":22,"bounds":{"left":0.33294547,"top":0.23902634,"width":0.012632979,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status • Sort in ascending order","depth":21,"bounds":{"left":0.38031915,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"Sort Button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status • Sort in ascending order","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Status","depth":21,"bounds":{"left":0.38031915,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Status","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20751 is not resolved","depth":20,"bounds":{"left":0.117519945,"top":0.27015164,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20751","depth":21,"bounds":{"left":0.117519945,"top":0.27015164,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Add hardcoded delay DeleteCrmEntityTrait","depth":22,"bounds":{"left":0.14178856,"top":0.27015164,"width":0.09391622,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add hardcoded delay DeleteCrmEntityTrait","depth":23,"bounds":{"left":0.14178856,"top":0.27015164,"width":0.09391622,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Medium","depth":21,"bounds":{"left":0.28158244,"top":0.27015164,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unassigned","depth":21,"bounds":{"left":0.3246343,"top":0.27015164,"width":0.026097074,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for Dev - Change status","depth":20,"bounds":{"left":0.33294547,"top":0.2717478,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"READY FOR DEV","depth":24,"bounds":{"left":0.33427528,"top":0.2725459,"width":0.029920213,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20752 is not resolved","depth":20,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20752","depth":21,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Implement Rate limiter in Client","depth":22,"bounds":{"left":0.1427859,"top":0.30247405,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Implement Rate limiter in Client","depth":23,"bounds":{"left":0.1427859,"top":0.30247405,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Medium","depth":21,"bounds":{"left":0.28158244,"top":0.30247405,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unassigned","depth":21,"bounds":{"left":0.3246343,"top":0.30247405,"width":0.026097074,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for Dev - Change status","depth":20,"bounds":{"left":0.33294547,"top":0.30407023,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"READY FOR DEV","depth":24,"bounds":{"left":0.33427528,"top":0.3048683,"width":0.029920213,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Work","depth":18,"bounds":{"left":0.108211435,"top":0.22944932,"width":0.1627327,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Work","depth":21,"bounds":{"left":0.11087101,"top":0.23902634,"width":0.010305851,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Work","depth":20,"bounds":{"left":0.26728722,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Work","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20751 is not resolved","depth":20,"bounds":{"left":0.117519945,"top":0.27015164,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20751","depth":21,"bounds":{"left":0.117519945,"top":0.27015164,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Add hardcoded delay DeleteCrmEntityTrait","depth":22,"bounds":{"left":0.14178856,"top":0.27015164,"width":0.09391622,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add hardcoded delay DeleteCrmEntityTrait","depth":23,"bounds":{"left":0.14178856,"top":0.27015164,"width":0.09391622,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20752 is not resolved","depth":20,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20752","depth":21,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Implement Rate limiter in Client","depth":22,"bounds":{"left":0.1427859,"top":0.30247405,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Implement Rate limiter in Client","depth":23,"bounds":{"left":0.1427859,"top":0.30247405,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Priority","depth":18,"bounds":{"left":0.27094415,"top":0.22944932,"width":0.018949468,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority","depth":21,"bounds":{"left":0.27360374,"top":0.23902634,"width":0.014295213,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Priority","depth":20,"bounds":{"left":0.2862367,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Priority","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Medium","depth":21,"bounds":{"left":0.28158244,"top":0.27015164,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Medium","depth":21,"bounds":{"left":0.28158244,"top":0.30247405,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Story Points","depth":18,"bounds":{"left":0.28989363,"top":0.22944932,"width":0.02144282,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Story Points","depth":21,"bounds":{"left":0.2925532,"top":0.23902634,"width":0.023603724,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Story Points","depth":20,"bounds":{"left":0.30767953,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Story Points","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Assignee","depth":18,"bounds":{"left":0.31133643,"top":0.22944932,"width":0.018949468,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":21,"bounds":{"left":0.31399602,"top":0.23902634,"width":0.018118352,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Assignee","depth":20,"bounds":{"left":0.32662898,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Assignee","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unassigned","depth":21,"bounds":{"left":0.3246343,"top":0.27015164,"width":0.026097074,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unassigned","depth":21,"bounds":{"left":0.3246343,"top":0.30247405,"width":0.026097074,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Status","depth":18,"bounds":{"left":0.3302859,"top":0.22944932,"width":0.053357713,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":21,"bounds":{"left":0.33294547,"top":0.23902634,"width":0.012632979,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status • Sort in ascending order","depth":20,"bounds":{"left":0.38031915,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"Sort Button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status • Sort in ascending order","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Status","depth":20,"bounds":{"left":0.38031915,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Status","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for Dev - Change status","depth":20,"bounds":{"left":0.33294547,"top":0.2717478,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"READY FOR DEV","depth":24,"bounds":{"left":0.33427528,"top":0.2725459,"width":0.029920213,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for Dev - Change status","depth":20,"bounds":{"left":0.33294547,"top":0.30407023,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"READY FOR DEV","depth":24,"bounds":{"left":0.33427528,"top":0.3048683,"width":0.029920213,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Linked work items Linked work items Link a work item","depth":11,"bounds":{"left":0.09990027,"top":0.3451716,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Linked work items","depth":13,"bounds":{"left":0.09857048,"top":0.34836394,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Linked work items","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linked work items","depth":14,"bounds":{"left":0.10787899,"top":0.3499601,"width":0.04654255,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Link a work item","depth":14,"bounds":{"left":0.37599733,"top":0.34836394,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Link a work item","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"is duplicated by","depth":12,"bounds":{"left":0.10787899,"top":0.37709498,"width":0.27543217,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is duplicated by","depth":13,"bounds":{"left":0.10787899,"top":0.377494,"width":0.030585106,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20728 is not done","depth":15,"bounds":{"left":0.11884973,"top":0.40582603,"width":0.02144282,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20728","depth":16,"bounds":{"left":0.11884973,"top":0.40582603,"width":0.02144282,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":15,"bounds":{"left":0.14295213,"top":0.39704707,"width":0.15026596,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":18,"bounds":{"left":0.14361702,"top":0.40542698,"width":0.16439494,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Duplicate - Change status","depth":16,"bounds":{"left":0.30452126,"top":0.40742218,"width":0.028922873,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DUPLICATE","depth":20,"bounds":{"left":0.30585107,"top":0.40822026,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unlink work item","depth":14,"bounds":{"left":0.3723404,"top":0.4066241,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Collapse Activity Activity","depth":12,"bounds":{"left":0.09990027,"top":0.45530728,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Activity","depth":14,"bounds":{"left":0.09857048,"top":0.4584996,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Activity","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":15,"bounds":{"left":0.10787899,"top":0.46009576,"width":0.019946808,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All","depth":14,"bounds":{"left":0.10887633,"top":0.48643255,"width":0.01412899,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":16,"bounds":{"left":0.11319814,"top":0.4896249,"width":0.005485372,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comments","depth":14,"bounds":{"left":0.12367021,"top":0.48643255,"width":0.032413565,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comments","depth":16,"bounds":{"left":0.12799202,"top":0.4896249,"width":0.023769947,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"History","depth":14,"bounds":{"left":0.15674867,"top":0.48643255,"width":0.024268618,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":16,"bounds":{"left":0.16107048,"top":0.4896249,"width":0.015625,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Work log","depth":14,"bounds":{"left":0.18168218,"top":0.48643255,"width":0.02825798,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work log","depth":16,"bounds":{"left":0.18600398,"top":0.4896249,"width":0.019614361,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Atlassian Intelligence Summarise","depth":14,"bounds":{"left":0.36535904,"top":0.490423,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarise","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newest first Newest first","depth":13,"bounds":{"left":0.37599733,"top":0.490423,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newest first","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-4168330656976405909
|
230731595770221804
|
visual_change
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Assets , (opens new window)
Assets
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-20285
JY-20285
/
Bug - Change work type
JY-20725
JY-20725
Copy link
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts- Summary, edit
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Add Description, edit
https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq
https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq
Turn on wrap
Copy as text
1
Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
2
{"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT","correlationId":"019db2b6-c (truncated...)
Check triggering jobs:
DeleteCrmEntityTrait
,
DetachActivityObject
,
VerifyActivityCrmTaskJob
Check logs:
'RematchActivityOnCrmObjectDetach'
Check whether the rate limiter
is used
in this case / is good enough:
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:calculateDelayInMicroseconds
Steps to reproduce
Steps to reproduce
Edit Steps to reproduce, edit
None
Actual outcome
Edit Actual outcome
Add text
Expected outcome
Edit Expected outcome
Add text
Collapse Subtasks Subtasks Work item actions Configure columns Create subtask
Collapse Subtasks
Collapse Subtasks
Subtasks
Work item actions
Work item actions
Configure columns
Configure columns
Create subtask
Create subtask
0
% Done
Work
Work
More actions for Work
More actions for Work
Priority
Priority
More actions for Priority
More actions for Priority
Story Points
Story Points
More actions for Story Points
More actions for Story Points
Assignee
Assignee
More actions for Assignee
More actions for Assignee
Status
Status
Status • Sort in ascending order
Status • Sort in ascending order
More actions for Status
More actions for Status
JY-20751 is not resolved
JY-20751
Add hardcoded delay DeleteCrmEntityTrait
Add hardcoded delay DeleteCrmEntityTrait
Medium
Unassigned
Ready for Dev - Change status
READY FOR DEV
JY-20752 is not resolved
JY-20752
Implement Rate limiter in Client
Implement Rate limiter in Client
Medium
Unassigned
Ready for Dev - Change status
READY FOR DEV
Work
Work
More actions for Work
More actions for Work
JY-20751 is not resolved
JY-20751
Add hardcoded delay DeleteCrmEntityTrait
Add hardcoded delay DeleteCrmEntityTrait
JY-20752 is not resolved
JY-20752
Implement Rate limiter in Client
Implement Rate limiter in Client
Priority
Priority
More actions for Priority
More actions for Priority
Medium
Medium
Story Points
Story Points
More actions for Story Points
More actions for Story Points
Assignee
Assignee
More actions for Assignee
More actions for Assignee
Unassigned
Unassigned
Status
Status
Status • Sort in ascending order
Status • Sort in ascending order
More actions for Status
More actions for Status
Ready for Dev - Change status
READY FOR DEV
Ready for Dev - Change status
READY FOR DEV
Collapse Linked work items Linked work items Link a work item
Collapse Linked work items
Collapse Linked work items
Linked work items
Link a work item
Link a work item
is duplicated by
is duplicated by
JY-20728 is not done
JY-20728
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Duplicate - Change status
DUPLICATE
Unlink work item
Collapse Activity Activity
Collapse Activity
Collapse Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Atlassian Intelligence Summarise
Summarise
Newest first Newest first
Newest first...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16399
|
735
|
30
|
2026-05-11T08:48:50.503798+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489330503_m2.jpg...
|
Firefox
|
[JY-20725] [HubSpot] Optimise CRM rematching on de [JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira — Work...
|
1
|
jiminny.atlassian.net/browse/JY-20725?actionerId=7 jiminny.atlassian.net/browse/JY-20725?actionerId=712020%3Ae67fb6e1-5298-44c2-9101-05d96c6e3768&sourceType=assign...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-20285
JY-20285
/
Bug - Change work type
JY-20725
JY-20725
Copy link
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts- Summary, edit
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Edit Description, edit
https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq
https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq
Connect your Sentry account
Connect your Sentry account
Turn on wrap
Copy as text
1
Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
2
{"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT","correlationId":"019db2b6-c (truncated...)
Check triggering jobs:
DeleteCrmEntityTrait
,
DetachActivityObject
,
VerifyActivityCrmTaskJob
Check logs:
'RematchActivityOnCrmObjectDetach'
Check whether the rate limiter
is used
in this case / is good enough:
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:calculateDelayInMicroseconds
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
None
Actual outcome
More information about
Edit Actual outcome
Add text
Expected outcome
More information about
Edit Expected outcome
Add text
Collapse Subtasks Subtasks Work item actions Configure columns Create subtask
Collapse Subtasks
Collapse Subtasks
Subtasks
Work item actions
Work item actions
Configure columns
Configure columns
Create subtask
Create subtask
0
% Done
Work
Work
More actions for Work
More actions for Work
Priority
Priority
More actions for Priority
More actions for Priority
Story Points
Story Points
More actions for Story Points
More actions for Story Points
Assignee
Assignee
More actions for Assignee
More actions for Assignee
Status
Status
Status • Sort in ascending order
Status • Sort in ascending order
More actions for Status
More actions for Status
JY-20751 is not resolved
JY-20751
Add hardcoded delay DeleteCrmEntityTrait
Add hardcoded delay DeleteCrmEntityTrait
Edit Summary
Edit Priority
Medium
Unassigned- edit Assignee
Unassigned
Ready for Dev - Change status
READY FOR DEV
JY-20752 is not resolved
JY-20752
Implement Rate limiter in Client
Implement Rate limiter in Client
Edit Summary
Edit Priority
Medium
Unassigned- edit Assignee
Unassigned
Ready for Dev - Change status
READY FOR DEV
Work
Work
More actions for Work
More actions for Work
JY-20751 is not resolved
JY-20751
Add hardcoded delay DeleteCrmEntityTrait
Add hardcoded delay DeleteCrmEntityTrait
Edit Summary
JY-20752 is not resolved
JY-20752
Implement Rate limiter in Client
Implement Rate limiter in Client
Edit Summary
Priority
Priority
More actions for Priority
More actions for Priority
Edit Priority
Medium
Edit Priority
Medium
Story Points
Story Points
More actions for Story Points
More actions for Story Points
Assignee
Assignee
More actions for Assignee
More actions for Assignee
Unassigned- edit Assignee
Unassigned
Unassigned- edit Assignee
Unassigned
Status
Status
Status • Sort in ascending order
Status • Sort in ascending order
More actions for Status
More actions for Status
Ready for Dev - Change status
READY FOR DEV
Ready for Dev - Change status
READY FOR DEV
Collapse Linked work items Linked work items Link a work item
Collapse Linked work items
Collapse Linked work items
Linked work items
Link a work item
Link a work item
is duplicated by
is duplicated by
JY-20728 is not done
JY-20728
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Duplicate - Change status
DUPLICATE
Unlink work item
Collapse Activity Activity
Collapse Activity
Collapse Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Atlassian Intelligence Summarise
Summarise
Newest first Newest first
Newest first
Add a comment…
Suggest a reply...
Suggest a reply...
Status update...
Status update...
Thanks...
Thanks...
Pro tip:
press
M
to comment
More information about Nikolay Yankov
More information about Nikolay Yankov
Nikolay Yankov
Copy link to comment
27 April 2026 at 14:29
BE: 3 days
QA: 1 day
Reply
Add thumbs up reaction
Add reaction
Edit
More actions
More information about Lukas Kovalik
More information about Lukas Kovalik
Lukas Kovalik
Copy link to comment
27 April 2026 at 14:04
Quick solution add sleep in
DeleteCrmEntityTrait
before dispatching
Implement Rate Limiter
API usage guidelines and limits - HubSpot docs
API usage guidelines and limits - HubSpot docs
app/Services/Crm/Hubspot/Client::makeRequest
Reply
Add thumbs up reaction
Add reaction
Edit
More actions
Resize work item view side panel
Watch options: You are watching this issue, 2 people watching
2
Share
Share
Actions
Actions
In Dev - Change status
In Dev
Automation
Automation
Improve Bug
Improve Bug
Details
Details...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.026761968,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.026761968,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.026761968,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.026761968,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.020113032,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.025265958,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.032081116,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.03723404,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.04537899,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.1434508,"top":0.06264964,"width":0.2017952,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.35355717,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.3648604,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.41206783,"top":0.057861134,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.42337102,"top":0.06384677,"width":0.020777926,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications","depth":12,"bounds":{"left":0.44946808,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notifications","depth":14,"bounds":{"left":0.45462102,"top":0.06344773,"width":0.027759308,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.46143618,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.4665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.47340426,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.47855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.48537233,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.49052528,"top":0.06344773,"width":0.05867686,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.020113032,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.030751329,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.020113032,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.030751329,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.020113032,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.030751329,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.020113032,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.030751329,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.08959442,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.020113032,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.030751329,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.072972074,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.08228058,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.026097074,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.024102394,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.03474069,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.02543218,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.072972074,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.08228058,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.028091755,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.03873005,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.028091755,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.03873005,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.028091755,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.03873005,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.028091755,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.03873005,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.028091755,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.03873005,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.08959442,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.024102394,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.03474069,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.0909242,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.024102394,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.03474069,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.020113032,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.030751329,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.08959442,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.020113032,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.030751329,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.09158909,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.098902926,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.020113032,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.030751329,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.08959442,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.030751329,"top":0.5494813,"width":0.025764627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.55706304,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.020113032,"top":0.56903434,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.030751329,"top":0.57501996,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.020113032,"top":0.5826017,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.08028591,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.020113032,"top":0.60415006,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.030751329,"top":0.6101357,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.14744017,"top":0.0981644,"width":0.062333778,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.10787899,"top":0.0933759,"width":0.013962766,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.10787899,"top":0.09696728,"width":0.013962766,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.12367021,"top":0.09577015,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New) Jiminny (New)","depth":15,"bounds":{"left":0.12915559,"top":0.0933759,"width":0.034574468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":17,"bounds":{"left":0.13646941,"top":0.09696728,"width":0.027260639,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.16555852,"top":0.09577015,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Epic - Change parent","depth":15,"bounds":{"left":0.1690492,"top":0.0933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20285","depth":15,"bounds":{"left":0.17702793,"top":0.0933759,"width":0.018450798,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20285","depth":17,"bounds":{"left":0.17702793,"top":0.09696728,"width":0.018450798,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.19730718,"top":0.09577015,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Bug - Change work type","depth":15,"bounds":{"left":0.20079787,"top":0.0933759,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20725","depth":15,"bounds":{"left":0.2087766,"top":0.0933759,"width":0.018284574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725","depth":17,"bounds":{"left":0.2087766,"top":0.09696728,"width":0.018284574,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.22573139,"top":0.096169196,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts- Summary, edit","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or create work related to this Bug","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add or create work related to this Bug","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View app actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View app actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Key details Key details","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Key details","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Key details","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key details","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Description","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Description, edit","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Connect your Sentry account","depth":15,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Connect your Sentry account","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Turn on wrap","depth":15,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Copy as text","depth":16,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019db2b6-c (truncated...)","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Check triggering jobs:","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DeleteCrmEntityTrait","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DetachActivityObject","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VerifyActivityCrmTaskJob","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Check logs:","depth":14,"bounds":{"left":0.10854388,"top":0.0,"width":0.027260639,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'RematchActivityOnCrmObjectDetach'","depth":15,"bounds":{"left":0.13696809,"top":0.0,"width":0.0831117,"height":0.0131683955},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Check whether the rate limiter","depth":14,"bounds":{"left":0.10854388,"top":0.0,"width":0.067652926,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is used","depth":15,"bounds":{"left":0.17619681,"top":0.0,"width":0.016123671,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in this case / is good enough:","depth":14,"bounds":{"left":0.19232048,"top":0.0,"width":0.06582447,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:calculateDelayInMicroseconds","depth":15,"bounds":{"left":0.109707445,"top":0.0,"width":0.22722739,"height":0.0131683955},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Steps to reproduce","depth":12,"bounds":{"left":0.10787899,"top":0.021947326,"width":0.042386968,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Steps to reproduce","depth":13,"bounds":{"left":0.10787899,"top":0.022745412,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.15159574,"top":0.023942538,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Steps to reproduce, edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":13,"bounds":{"left":0.10787899,"top":0.045889866,"width":0.011801862,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actual outcome","depth":13,"bounds":{"left":0.10787899,"top":0.0905826,"width":0.034906916,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.14677526,"top":0.091380686,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Actual outcome","depth":13,"bounds":{"left":0.21825133,"top":0.09736632,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.0905826,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expected outcome","depth":13,"bounds":{"left":0.10787899,"top":0.12889066,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":12,"bounds":{"left":0.1534242,"top":0.12968874,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Expected outcome","depth":13,"bounds":{"left":0.21825133,"top":0.13567439,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add text","depth":14,"bounds":{"left":0.21825133,"top":0.12889066,"width":0.018450798,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Subtasks Subtasks Work item actions Configure columns Create subtask","depth":11,"bounds":{"left":0.09990027,"top":0.18076617,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Subtasks","depth":13,"bounds":{"left":0.09857048,"top":0.1839585,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Subtasks","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Subtasks","depth":14,"bounds":{"left":0.10787899,"top":0.18555467,"width":0.023936171,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Work item actions","depth":12,"bounds":{"left":0.35738033,"top":0.1839585,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Work item actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Configure columns","depth":14,"bounds":{"left":0.36668882,"top":0.1839585,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Configure columns","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create subtask","depth":13,"bounds":{"left":0.37599733,"top":0.1839585,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create subtask","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":14,"bounds":{"left":0.35821143,"top":0.20710295,"width":0.0029920214,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"% Done","depth":13,"bounds":{"left":0.36120346,"top":0.20710295,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Work","depth":19,"bounds":{"left":0.108211435,"top":0.22944932,"width":0.14112367,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Work","depth":22,"bounds":{"left":0.11087101,"top":0.23902634,"width":0.010305851,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Work","depth":21,"bounds":{"left":0.24567819,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Work","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Priority","depth":19,"bounds":{"left":0.24933511,"top":0.22944932,"width":0.022606382,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority","depth":22,"bounds":{"left":0.25199467,"top":0.23902634,"width":0.014295213,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Priority","depth":21,"bounds":{"left":0.2682846,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Priority","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Story Points","depth":19,"bounds":{"left":0.27194148,"top":0.22944932,"width":0.025598405,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Story Points","depth":22,"bounds":{"left":0.27460107,"top":0.23902634,"width":0.023603724,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Story Points","depth":21,"bounds":{"left":0.29388297,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Story Points","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Assignee","depth":19,"bounds":{"left":0.2975399,"top":0.22944932,"width":0.022606382,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":22,"bounds":{"left":0.30019948,"top":0.23902634,"width":0.018118352,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Assignee","depth":21,"bounds":{"left":0.31648937,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Assignee","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Status","depth":19,"bounds":{"left":0.32014626,"top":0.22944932,"width":0.06349734,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":22,"bounds":{"left":0.32280585,"top":0.23902634,"width":0.012466756,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status • Sort in ascending order","depth":21,"bounds":{"left":0.38031915,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"Sort Button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status • Sort in ascending order","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Status","depth":21,"bounds":{"left":0.38031915,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Status","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20751 is not resolved","depth":20,"bounds":{"left":0.117519945,"top":0.27015164,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20751","depth":21,"bounds":{"left":0.117519945,"top":0.27015164,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Add hardcoded delay DeleteCrmEntityTrait","depth":22,"bounds":{"left":0.14178856,"top":0.27015164,"width":0.09391622,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add hardcoded delay DeleteCrmEntityTrait","depth":23,"bounds":{"left":0.14178856,"top":0.27015164,"width":0.09391622,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Summary","depth":21,"bounds":{"left":0.23869681,"top":0.2677574,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Priority","depth":20,"bounds":{"left":0.25199467,"top":0.27693537,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium","depth":21,"bounds":{"left":0.2599734,"top":0.27015164,"width":0.017785905,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unassigned- edit Assignee","depth":20,"bounds":{"left":0.30019948,"top":0.27693537,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unassigned","depth":21,"bounds":{"left":0.31083778,"top":0.27015164,"width":0.025930852,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for Dev - Change status","depth":20,"bounds":{"left":0.32280585,"top":0.2717478,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"READY FOR DEV","depth":24,"bounds":{"left":0.32413563,"top":0.2725459,"width":0.029920213,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20752 is not resolved","depth":20,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20752","depth":21,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Implement Rate limiter in Client","depth":22,"bounds":{"left":0.1427859,"top":0.30247405,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Implement Rate limiter in Client","depth":23,"bounds":{"left":0.1427859,"top":0.30247405,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Summary","depth":21,"bounds":{"left":0.23869681,"top":0.30007982,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Priority","depth":20,"bounds":{"left":0.25199467,"top":0.30925778,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium","depth":21,"bounds":{"left":0.2599734,"top":0.30247405,"width":0.017785905,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unassigned- edit Assignee","depth":20,"bounds":{"left":0.30019948,"top":0.30925778,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unassigned","depth":21,"bounds":{"left":0.31083778,"top":0.30247405,"width":0.025930852,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for Dev - Change status","depth":20,"bounds":{"left":0.32280585,"top":0.30407023,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"READY FOR DEV","depth":24,"bounds":{"left":0.32413563,"top":0.3048683,"width":0.029920213,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Work","depth":18,"bounds":{"left":0.108211435,"top":0.22944932,"width":0.14112367,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Work","depth":21,"bounds":{"left":0.11087101,"top":0.23902634,"width":0.010305851,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Work","depth":20,"bounds":{"left":0.24567819,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Work","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20751 is not resolved","depth":20,"bounds":{"left":0.117519945,"top":0.27015164,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20751","depth":21,"bounds":{"left":0.117519945,"top":0.27015164,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Add hardcoded delay DeleteCrmEntityTrait","depth":22,"bounds":{"left":0.14178856,"top":0.27015164,"width":0.09391622,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add hardcoded delay DeleteCrmEntityTrait","depth":23,"bounds":{"left":0.14178856,"top":0.27015164,"width":0.09391622,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Summary","depth":21,"bounds":{"left":0.23869681,"top":0.2677574,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20752 is not resolved","depth":20,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20752","depth":21,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Implement Rate limiter in Client","depth":22,"bounds":{"left":0.1427859,"top":0.30247405,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Implement Rate limiter in Client","depth":23,"bounds":{"left":0.1427859,"top":0.30247405,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Summary","depth":21,"bounds":{"left":0.23869681,"top":0.30007982,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCell","text":"Priority","depth":18,"bounds":{"left":0.24933511,"top":0.22944932,"width":0.022606382,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority","depth":21,"bounds":{"left":0.25199467,"top":0.23902634,"width":0.014295213,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Priority","depth":20,"bounds":{"left":0.2682846,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Priority","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Priority","depth":20,"bounds":{"left":0.25199467,"top":0.27693537,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium","depth":21,"bounds":{"left":0.2599734,"top":0.27015164,"width":0.017785905,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Priority","depth":20,"bounds":{"left":0.25199467,"top":0.30925778,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium","depth":21,"bounds":{"left":0.2599734,"top":0.30247405,"width":0.017785905,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Story Points","depth":18,"bounds":{"left":0.27194148,"top":0.22944932,"width":0.025598405,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Story Points","depth":21,"bounds":{"left":0.27460107,"top":0.23902634,"width":0.023603724,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Story Points","depth":20,"bounds":{"left":0.29388297,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Story Points","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Assignee","depth":18,"bounds":{"left":0.2975399,"top":0.22944932,"width":0.022606382,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":21,"bounds":{"left":0.30019948,"top":0.23902634,"width":0.018118352,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Assignee","depth":20,"bounds":{"left":0.31648937,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Assignee","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unassigned- edit Assignee","depth":20,"bounds":{"left":0.30019948,"top":0.27693537,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unassigned","depth":21,"bounds":{"left":0.31083778,"top":0.27015164,"width":0.025930852,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unassigned- edit Assignee","depth":20,"bounds":{"left":0.30019948,"top":0.30925778,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unassigned","depth":21,"bounds":{"left":0.31083778,"top":0.30247405,"width":0.025930852,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Status","depth":18,"bounds":{"left":0.32014626,"top":0.22944932,"width":0.06349734,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":21,"bounds":{"left":0.32280585,"top":0.23902634,"width":0.012466756,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status • Sort in ascending order","depth":20,"bounds":{"left":0.38031915,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"Sort Button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status • Sort in ascending order","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Status","depth":20,"bounds":{"left":0.38031915,"top":0.2434158,"width":0.0003324468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Status","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for Dev - Change status","depth":20,"bounds":{"left":0.32280585,"top":0.2717478,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"READY FOR DEV","depth":24,"bounds":{"left":0.32413563,"top":0.2725459,"width":0.029920213,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for Dev - Change status","depth":20,"bounds":{"left":0.32280585,"top":0.30407023,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"READY FOR DEV","depth":24,"bounds":{"left":0.32413563,"top":0.3048683,"width":0.029920213,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Linked work items Linked work items Link a work item","depth":11,"bounds":{"left":0.09990027,"top":0.3451716,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Linked work items","depth":13,"bounds":{"left":0.09857048,"top":0.34836394,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Linked work items","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linked work items","depth":14,"bounds":{"left":0.10787899,"top":0.3499601,"width":0.04654255,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Link a work item","depth":14,"bounds":{"left":0.37599733,"top":0.34836394,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Link a work item","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"is duplicated by","depth":12,"bounds":{"left":0.10787899,"top":0.37709498,"width":0.27543217,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is duplicated by","depth":13,"bounds":{"left":0.10787899,"top":0.377494,"width":0.030585106,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20728 is not done","depth":15,"bounds":{"left":0.11884973,"top":0.40582603,"width":0.02144282,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20728","depth":16,"bounds":{"left":0.11884973,"top":0.40582603,"width":0.02144282,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":15,"bounds":{"left":0.14295213,"top":0.39704707,"width":0.15026596,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":18,"bounds":{"left":0.14361702,"top":0.40542698,"width":0.16439494,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Duplicate - Change status","depth":16,"bounds":{"left":0.30452126,"top":0.40742218,"width":0.028922873,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DUPLICATE","depth":20,"bounds":{"left":0.30585107,"top":0.40822026,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unlink work item","depth":14,"bounds":{"left":0.3723404,"top":0.4066241,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Collapse Activity Activity","depth":12,"bounds":{"left":0.09990027,"top":0.45530728,"width":0.2840758,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Activity","depth":14,"bounds":{"left":0.09857048,"top":0.4584996,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Activity","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":15,"bounds":{"left":0.10787899,"top":0.46009576,"width":0.019946808,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All","depth":14,"bounds":{"left":0.10887633,"top":0.48643255,"width":0.01412899,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":16,"bounds":{"left":0.11319814,"top":0.4896249,"width":0.005485372,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comments","depth":14,"bounds":{"left":0.12367021,"top":0.48643255,"width":0.032413565,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comments","depth":16,"bounds":{"left":0.12799202,"top":0.4896249,"width":0.023769947,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"History","depth":14,"bounds":{"left":0.15674867,"top":0.48643255,"width":0.024268618,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":16,"bounds":{"left":0.16107048,"top":0.4896249,"width":0.015625,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Work log","depth":14,"bounds":{"left":0.18168218,"top":0.48643255,"width":0.02825798,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work log","depth":16,"bounds":{"left":0.18600398,"top":0.4896249,"width":0.019614361,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Atlassian Intelligence Summarise","depth":14,"bounds":{"left":0.36535904,"top":0.490423,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarise","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newest first Newest first","depth":13,"bounds":{"left":0.37599733,"top":0.490423,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newest first","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add a comment…","depth":15,"bounds":{"left":0.12184176,"top":0.5303272,"width":0.26146942,"height":0.07182761},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Suggest a reply...","depth":17,"bounds":{"left":0.1278258,"top":0.5686353,"width":0.046708778,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Suggest a reply...","depth":19,"bounds":{"left":0.13181517,"top":0.57102954,"width":0.03873005,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status update...","depth":17,"bounds":{"left":0.17586437,"top":0.5686353,"width":0.04305186,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status update...","depth":19,"bounds":{"left":0.17985372,"top":0.57102954,"width":0.03507314,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Thanks...","depth":17,"bounds":{"left":0.22024602,"top":0.5686353,"width":0.028590426,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Thanks...","depth":19,"bounds":{"left":0.22423537,"top":0.57102954,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pro tip:","depth":16,"bounds":{"left":0.12117686,"top":0.6105347,"width":0.013796543,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"press","depth":15,"bounds":{"left":0.1349734,"top":0.6105347,"width":0.012632979,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"M","depth":17,"bounds":{"left":0.14893617,"top":0.6113328,"width":0.0034906915,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to comment","depth":15,"bounds":{"left":0.15375665,"top":0.6105347,"width":0.023603724,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"More information about Nikolay Yankov","depth":18,"bounds":{"left":0.12649602,"top":0.6520351,"width":0.034574468,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Nikolay Yankov","depth":20,"bounds":{"left":0.12649602,"top":0.65163606,"width":0.034574468,"height":0.019553073},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Yankov","depth":21,"bounds":{"left":0.12649602,"top":0.6560255,"width":0.034574468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link to comment","depth":18,"bounds":{"left":0.16240026,"top":0.6548284,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"27 April 2026 at 14:29","depth":19,"bounds":{"left":0.12649602,"top":0.6715882,"width":0.04155585,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BE: 3 days","depth":19,"bounds":{"left":0.12649602,"top":0.69592977,"width":0.023105053,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QA: 1 day","depth":19,"bounds":{"left":0.12649602,"top":0.7150838,"width":0.02044548,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Reply","depth":17,"bounds":{"left":0.12649602,"top":0.74142057,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Add thumbs up reaction","depth":17,"bounds":{"left":0.13713431,"top":0.74142057,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Add reaction","depth":17,"bounds":{"left":0.14777261,"top":0.74142057,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":17,"bounds":{"left":0.1584109,"top":0.74142057,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More actions","depth":17,"bounds":{"left":0.1690492,"top":0.74142057,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"More information about Lukas Kovalik","depth":18,"bounds":{"left":0.12649602,"top":0.782921,"width":0.031083776,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Lukas Kovalik","depth":20,"bounds":{"left":0.12649602,"top":0.78252196,"width":0.031083776,"height":0.019553073},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":21,"bounds":{"left":0.12649602,"top":0.7869114,"width":0.031083776,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link to comment","depth":18,"bounds":{"left":0.15890957,"top":0.78571427,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"27 April 2026 at 14:04","depth":19,"bounds":{"left":0.12649602,"top":0.8024741,"width":0.041722074,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quick solution add sleep in","depth":21,"bounds":{"left":0.13447474,"top":0.82681566,"width":0.06050532,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DeleteCrmEntityTrait","depth":22,"bounds":{"left":0.19630983,"top":0.82801276,"width":0.04886968,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before dispatching","depth":21,"bounds":{"left":0.24634309,"top":0.82681566,"width":0.043882977,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implement Rate Limiter","depth":21,"bounds":{"left":0.13447474,"top":0.849162,"width":0.05119681,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"API usage guidelines and limits - HubSpot docs","depth":19,"bounds":{"left":0.12649602,"top":0.87549883,"width":0.11486037,"height":0.018754989},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API usage guidelines and limits - HubSpot docs","depth":20,"bounds":{"left":0.13480718,"top":0.87789303,"width":0.10488697,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app/Services/Crm/Hubspot/Client::makeRequest","depth":20,"bounds":{"left":0.12765957,"top":0.90782124,"width":0.107546546,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Reply","depth":17,"bounds":{"left":0.12649602,"top":0.93296087,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Add thumbs up reaction","depth":17,"bounds":{"left":0.13713431,"top":0.93296087,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Add reaction","depth":17,"bounds":{"left":0.14777261,"top":0.93296087,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":17,"bounds":{"left":0.1584109,"top":0.93296087,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More actions","depth":17,"bounds":{"left":0.1690492,"top":0.93296087,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resize work item view side panel","depth":12,"bounds":{"left":0.44398272,"top":0.0981644,"width":0.07263963,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Watch options: You are watching this issue, 2 people watching","depth":13,"bounds":{"left":0.44730717,"top":0.10694334,"width":0.018118352,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":17,"bounds":{"left":0.4586104,"top":0.11292897,"width":0.0028257978,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Share","depth":14,"bounds":{"left":0.4680851,"top":0.10694334,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Share","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Actions","depth":14,"bounds":{"left":0.48138297,"top":0.10694334,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Actions","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"In Dev - Change status","depth":11,"bounds":{"left":0.39860374,"top":0.14365523,"width":0.028756648,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"In Dev","depth":13,"bounds":{"left":0.40259308,"top":0.14964086,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Automation","depth":11,"bounds":{"left":0.43267953,"top":0.14365523,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Automation","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Improve Bug","depth":11,"bounds":{"left":0.39860374,"top":0.17877094,"width":0.042220745,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Improve Bug","depth":13,"bounds":{"left":0.40791222,"top":0.18475658,"width":0.028922873,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Details","depth":14,"bounds":{"left":0.40159574,"top":0.22266561,"width":0.08211436,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXHeading","text":"Details","depth":17,"bounds":{"left":0.41090426,"top":0.22585794,"width":0.01861702,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"}]...
|
8756501179401632401
|
222841496036164844
|
visual_change
|
accessibility
|
NULL
|
New Tab
Close tab
Jy 20820 es reindex stream model New Tab
Close tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Close tab
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-20285
JY-20285
/
Bug - Change work type
JY-20725
JY-20725
Copy link
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts- Summary, edit
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Add or create work related to this Bug
Add or create work related to this Bug
View app actions
View app actions
Collapse Key details Key details
Collapse Key details
Collapse Key details
Key details
Description
Description
Edit Description, edit
https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq
https://jiminny.sentry.io/issues/7007366572/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream&sort=freq
Connect your Sentry account
Connect your Sentry account
Turn on wrap
Copy as text
1
Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
2
{"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT","correlationId":"019db2b6-c (truncated...)
Check triggering jobs:
DeleteCrmEntityTrait
,
DetachActivityObject
,
VerifyActivityCrmTaskJob
Check logs:
'RematchActivityOnCrmObjectDetach'
Check whether the rate limiter
is used
in this case / is good enough:
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:calculateDelayInMicroseconds
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
None
Actual outcome
More information about
Edit Actual outcome
Add text
Expected outcome
More information about
Edit Expected outcome
Add text
Collapse Subtasks Subtasks Work item actions Configure columns Create subtask
Collapse Subtasks
Collapse Subtasks
Subtasks
Work item actions
Work item actions
Configure columns
Configure columns
Create subtask
Create subtask
0
% Done
Work
Work
More actions for Work
More actions for Work
Priority
Priority
More actions for Priority
More actions for Priority
Story Points
Story Points
More actions for Story Points
More actions for Story Points
Assignee
Assignee
More actions for Assignee
More actions for Assignee
Status
Status
Status • Sort in ascending order
Status • Sort in ascending order
More actions for Status
More actions for Status
JY-20751 is not resolved
JY-20751
Add hardcoded delay DeleteCrmEntityTrait
Add hardcoded delay DeleteCrmEntityTrait
Edit Summary
Edit Priority
Medium
Unassigned- edit Assignee
Unassigned
Ready for Dev - Change status
READY FOR DEV
JY-20752 is not resolved
JY-20752
Implement Rate limiter in Client
Implement Rate limiter in Client
Edit Summary
Edit Priority
Medium
Unassigned- edit Assignee
Unassigned
Ready for Dev - Change status
READY FOR DEV
Work
Work
More actions for Work
More actions for Work
JY-20751 is not resolved
JY-20751
Add hardcoded delay DeleteCrmEntityTrait
Add hardcoded delay DeleteCrmEntityTrait
Edit Summary
JY-20752 is not resolved
JY-20752
Implement Rate limiter in Client
Implement Rate limiter in Client
Edit Summary
Priority
Priority
More actions for Priority
More actions for Priority
Edit Priority
Medium
Edit Priority
Medium
Story Points
Story Points
More actions for Story Points
More actions for Story Points
Assignee
Assignee
More actions for Assignee
More actions for Assignee
Unassigned- edit Assignee
Unassigned
Unassigned- edit Assignee
Unassigned
Status
Status
Status • Sort in ascending order
Status • Sort in ascending order
More actions for Status
More actions for Status
Ready for Dev - Change status
READY FOR DEV
Ready for Dev - Change status
READY FOR DEV
Collapse Linked work items Linked work items Link a work item
Collapse Linked work items
Collapse Linked work items
Linked work items
Link a work item
Link a work item
is duplicated by
is duplicated by
JY-20728 is not done
JY-20728
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Duplicate - Change status
DUPLICATE
Unlink work item
Collapse Activity Activity
Collapse Activity
Collapse Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Atlassian Intelligence Summarise
Summarise
Newest first Newest first
Newest first
Add a comment…
Suggest a reply...
Suggest a reply...
Status update...
Status update...
Thanks...
Thanks...
Pro tip:
press
M
to comment
More information about Nikolay Yankov
More information about Nikolay Yankov
Nikolay Yankov
Copy link to comment
27 April 2026 at 14:29
BE: 3 days
QA: 1 day
Reply
Add thumbs up reaction
Add reaction
Edit
More actions
More information about Lukas Kovalik
More information about Lukas Kovalik
Lukas Kovalik
Copy link to comment
27 April 2026 at 14:04
Quick solution add sleep in
DeleteCrmEntityTrait
before dispatching
Implement Rate Limiter
API usage guidelines and limits - HubSpot docs
API usage guidelines and limits - HubSpot docs
app/Services/Crm/Hubspot/Client::makeRequest
Reply
Add thumbs up reaction
Add reaction
Edit
More actions
Resize work item view side panel
Watch options: You are watching this issue, 2 people watching
2
Share
Share
Actions
Actions
In Dev - Change status
In Dev
Automation
Automation
Improve Bug
Improve Bug
Details
Details...
|
16398
|
NULL
|
NULL
|
NULL
|
|
16401
|
735
|
31
|
2026-05-11T08:48:56.876396+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489336876_m2.jpg...
|
PhpStorm
|
faVsco.js – HubspotPaginationService.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxО..0EditvIewHistorybookmarksPronlles& J FirefoxО..0EditvIewHistorybookmarksPronlles& JIMINNYg For you(• Recent# Starred8+ Apps0, Spaces+ ....Recent|a Jiminny (New) +...IWD Platform TeamII Capture TeamID Enterprise Stability I...W Processing TeamIID SE KanbanService-Desk= More spaces= FiltersDashboards& Operations& Confluence: Teamsº= Customise sidebarToolsWindowHelpny.atlassian.net/browse/JY-20725?actionerld=712020%3Ae67fb6e1-5298-44c2-9101-05d96c6e3768&sourceType:Q SearchSpaces / Jiminny (New) / & Jy-20285 / #f JY-20725+ CreateExpected outcomeAdd textiSubtasks... III +U/ DoneWork$ JY-20751 Add hardcoded delay DeleteCrmEntityTrait& JY-20752 Implement Rate limiter in ClientPriority= м...= M..Story P….. Assig….. StatusQ Un: READY FORDEV~& Un: READY FORDEV~Linked work itemsis duolicated bv# JY-20728 [HubSpot] Optimise CRM rematching on delete hubspot accounts/…..DUPLICATEVActivityAll Comments History Work logAdd a comment...Suggest a reply... Status update... Thanks...Pro tio: oress M to comment2 oay Ya 1229BE: 3 daysQA: 1 day2uKas 202 l1 14.011. Quick solution add sleep in DeleteCrmEntityTrait before dispatching2. Implement Rate LimiterI API usage guidelines and limits - HubSpot docsapp/Services/Crm/Hubspot/Client: :makeRequestAsk RovoIn Dev v* Improve Bug• DetailsAssianeeLukas KovalikLukas KovalikDeveloomentQ Open with VS Code9° Create branch, Create commitLabelsINoneSub-ProductAda optionsStory PointsOrganisationsComponentsPlatformFix versionsNoneParentIJY-20285 Platform StabilitySorintPlatform Sprint 3 Q2Priority= Mediumsupoont Dally • In sn 12m100% 18• Mon 11 May 11:48:56ninny@localhost]A HS_Jocal (jiminny@localhost]Cascadeconsole [slAcing)INFO: [Hubspot] DEBUG Getting headers {Hubspot Rate Limit Re+0 ..21:15 GMT"],mson,charser=utt-onRateLimitException-phpRemoved policy field & methodscache stores scalar int retryafter) instead of arrayDrop policy from RateL1m1tException constructor-SOF"],"1,Removed DAILY LIMIT branchReasonMiddleware doesn't need it: cache TTL handles DAILY naturallySimpler; no policy to trackMatch new exception signature; still log policy for observabilityretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1:"max-aqe=31536000* 1ncludeSubDomains: preload")nNamed JITTER SECONDS constantCollapsed dual catch into single catch + instanceofSelf-documentingMore readable; no awkward empty rethrow blockentials": ["false"],c=|"019e02d0-6fd8-7812-bdba-885b7ccb3ee3)",3a-IAD| "™],["nosniff"],": ["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],UrtdQgXVcik50pdqF6hZVYKhzTnQBidvMabeCtmOY-1778163675-1.0.1..domain=.hubapj.com; Http0nly; Secure; SameSite=None"],cloudflare.com\\/report\\/v4?s=NYALsVTP0fYm32qrSDjxYE4sd2RW|How DAILY_LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch, no siob->fail(. no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue evcles per second per worke• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successful calls/s — HubSoot's limit)• Same final outcome (29k succeed. 291k fail at T-30min)C98-4541-b9za-adta/Sboyeab",04-9405-0e50551e5545MetricSuccessful jobs in 30minWasted HubSpot API callsJob pop cycles/secLog entries (with sampling)Averade delav ner releacePrevious (this round)9,000~10,800~50-100~10,000275gThis round9,000~10,800~100-250~10,000The faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-cide throttlina3 files +73 -43>Ask anything (38AL)+ « CodeClaude Onus 4.7 MediumAccept allW Windsurf Teams 36:52 UTF-8f 4 spaces...
|
NULL
|
-503281465106158801
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxО..0EditvIewHistorybookmarksPronlles& J FirefoxО..0EditvIewHistorybookmarksPronlles& JIMINNYg For you(• Recent# Starred8+ Apps0, Spaces+ ....Recent|a Jiminny (New) +...IWD Platform TeamII Capture TeamID Enterprise Stability I...W Processing TeamIID SE KanbanService-Desk= More spaces= FiltersDashboards& Operations& Confluence: Teamsº= Customise sidebarToolsWindowHelpny.atlassian.net/browse/JY-20725?actionerld=712020%3Ae67fb6e1-5298-44c2-9101-05d96c6e3768&sourceType:Q SearchSpaces / Jiminny (New) / & Jy-20285 / #f JY-20725+ CreateExpected outcomeAdd textiSubtasks... III +U/ DoneWork$ JY-20751 Add hardcoded delay DeleteCrmEntityTrait& JY-20752 Implement Rate limiter in ClientPriority= м...= M..Story P….. Assig….. StatusQ Un: READY FORDEV~& Un: READY FORDEV~Linked work itemsis duolicated bv# JY-20728 [HubSpot] Optimise CRM rematching on delete hubspot accounts/…..DUPLICATEVActivityAll Comments History Work logAdd a comment...Suggest a reply... Status update... Thanks...Pro tio: oress M to comment2 oay Ya 1229BE: 3 daysQA: 1 day2uKas 202 l1 14.011. Quick solution add sleep in DeleteCrmEntityTrait before dispatching2. Implement Rate LimiterI API usage guidelines and limits - HubSpot docsapp/Services/Crm/Hubspot/Client: :makeRequestAsk RovoIn Dev v* Improve Bug• DetailsAssianeeLukas KovalikLukas KovalikDeveloomentQ Open with VS Code9° Create branch, Create commitLabelsINoneSub-ProductAda optionsStory PointsOrganisationsComponentsPlatformFix versionsNoneParentIJY-20285 Platform StabilitySorintPlatform Sprint 3 Q2Priority= Mediumsupoont Dally • In sn 12m100% 18• Mon 11 May 11:48:56ninny@localhost]A HS_Jocal (jiminny@localhost]Cascadeconsole [slAcing)INFO: [Hubspot] DEBUG Getting headers {Hubspot Rate Limit Re+0 ..21:15 GMT"],mson,charser=utt-onRateLimitException-phpRemoved policy field & methodscache stores scalar int retryafter) instead of arrayDrop policy from RateL1m1tException constructor-SOF"],"1,Removed DAILY LIMIT branchReasonMiddleware doesn't need it: cache TTL handles DAILY naturallySimpler; no policy to trackMatch new exception signature; still log policy for observabilityretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1:"max-aqe=31536000* 1ncludeSubDomains: preload")nNamed JITTER SECONDS constantCollapsed dual catch into single catch + instanceofSelf-documentingMore readable; no awkward empty rethrow blockentials": ["false"],c=|"019e02d0-6fd8-7812-bdba-885b7ccb3ee3)",3a-IAD| "™],["nosniff"],": ["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],UrtdQgXVcik50pdqF6hZVYKhzTnQBidvMabeCtmOY-1778163675-1.0.1..domain=.hubapj.com; Http0nly; Secure; SameSite=None"],cloudflare.com\\/report\\/v4?s=NYALsVTP0fYm32qrSDjxYE4sd2RW|How DAILY_LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch, no siob->fail(. no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue evcles per second per worke• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successful calls/s — HubSoot's limit)• Same final outcome (29k succeed. 291k fail at T-30min)C98-4541-b9za-adta/Sboyeab",04-9405-0e50551e5545MetricSuccessful jobs in 30minWasted HubSpot API callsJob pop cycles/secLog entries (with sampling)Averade delav ner releacePrevious (this round)9,000~10,800~50-100~10,000275gThis round9,000~10,800~100-250~10,000The faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-cide throttlina3 files +73 -43>Ask anything (38AL)+ « CodeClaude Onus 4.7 MediumAccept allW Windsurf Teams 36:52 UTF-8f 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16402
|
735
|
32
|
2026-05-11T08:48:59.556246+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489339556_m2.jpg...
|
PhpStorm
|
faVsco.js – HubspotPaginationService.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
12
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\Pagination;
use Jiminny\Services\Crm\Hubspot\Client;
use Jiminny\Services\Crm\Hubspot\PayloadBuilder;
use Psr\Log\LoggerInterface;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
class HubspotPaginationService
{
public function __construct(
private LoggerInterface $logger
) {
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
Client $client,
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
$state = new PaginationState(offset: $offset);
$endpoint = Client::BASE_URL . "/crm/v3/objects/{$type}/search";
$defaultFilter = $payload['filters'] ?? [];
$resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;
$teamId = $client->getConfig()->getTeam()->getId();
$delay = $this->calculateDelayInMicroseconds();
do {
if ($this->shouldStopPagination($state, $teamId)) {
break;
}
$payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);
$this->validateTokenIfNeeded($client, $state);
if ($state->requestCount > 0) {
usleep($delay);
}
$page = $this->executeSearchRequest($client, $type, $payload, $state);
$state->setTotal($page['total'] ?? 0);
$this->updateLastRecordId($page, $state);
// Safely iterate over results with null check
$results = $page['results'] ?? [];
foreach ($results as $row) {
$state->incrementTotalRecords();
yield $row;
}
$state->setOffset($this->getNextOffset($page));
$state->incrementRequestCount();
$this->logPaginationProgress($state, $teamId, $endpoint);
} while ($state->offset && ! empty($page['results']));
// Log final pagination completion stats
$this->logger->info('[Hubspot] Pagination completed', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'total_requests' => $state->requestCount,
'total_records_fetched' => $state->totalRecords,
'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),
'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,
]);
// Update reference parameters
$total = $state->total;
$lastRecordId = $state->lastRecordId;
}
private function shouldStopPagination(PaginationState $state, int $teamId): bool
{
if ($state->hasReachedSafetyLimit()) {
$this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [
'team_id' => $teamId,
'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,
'total_fetched' => $state->totalRecords,
]);
return true;
}
return false;
}
private function handlePaginationStrategy(
array $payload,
array $defaultFilter,
PaginationState $state,
int $resultsPerPage,
int $teamId
): array {
if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {
$payload['filters'] = $defaultFilter;
$payload['filters'][] = [
'propertyName' => 'hs_object_id',
'operator' => 'LT',
'value' => $state->lastRecordId,
];
$this->logger->info('[Hubspot] Search keyset pagination request', [
'team_id' => $teamId,
'sequence' => $state->requestCount,
'itemsPerPage' => $resultsPerPage,
'payload' => $payload,
'total' => $state->total,
]);
unset($payload['after']);
$state->setOffset(0);
}
if ($state->offset) {
$payload['after'] = $state->offset;
}
return $payload;
}
private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool
{
// Check if we've hit the offset limit
$shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;
if ($shouldSwitch && $state->lastRecordId === null) {
$this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [
'request_count' => $state->requestCount,
'current_offset' => $state->offset,
'results_per_page' => $resultsPerPage,
'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,
]);
return false; // Continue with offset pagination
}
return $shouldSwitch;
}
private function validateTokenIfNeeded(Client $client, PaginationState $state): void
{
if ($state->shouldValidateToken()) {
$client->ensureValidToken();
$state->updateLastTokenCheck();
}
}
private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array
{
try {
return $client->search($objectType, $payload);
} catch (\Exception $e) {
if ($client->isUnauthorizedException($e)) {
$this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'error' => $e->getMessage(),
]);
$client->ensureValidToken();
$state->updateLastTokenCheck();
try {
$result = $client->search($objectType, $payload);
$this->logger->info('[Hubspot] Token refresh and retry successful', [
'team_id' => $client->getConfig()->getTeam()->getId(),
]);
return $result;
} catch (\Exception $retryException) {
$this->logger->error('[Hubspot] Retry request failed after token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'original_error' => $e->getMessage(),
'retry_error' => $retryException->getMessage(),
]);
throw $retryException;
}
}
// RateLimitException and other exceptions are re-thrown as-is
throw $e;
}
}
private function updateLastRecordId(array $page, PaginationState $state): void
{
$lastRecord = ! empty($page['results']) ? end($page['results']) : null;
$lastRecordId = $lastRecord['id'] ?? null;
$state->updateLastRecordId($lastRecordId);
}
private function getNextOffset(array $page): int
{
return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;
}
private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void
{
if ($state->shouldLogProgress()) {
$this->logger->info('[Hubspot] Pagination progress log', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'requests_made' => $state->requestCount,
'records_fetched' => $state->totalRecords,
'elapsed_seconds' => $state->getElapsedSeconds(),
]);
}
}
private function calculateDelayInMicroseconds(): int
{
return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"12","depth":4,"bounds":{"left":0.38530585,"top":0.19952115,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.39660904,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.4039229,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n if ($this->shouldStopPagination($state, $teamId)) {\n break;\n }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n $this->validateTokenIfNeeded($client, $state);\n if ($state->requestCount > 0) {\n usleep($delay);\n }\n\n $page = $this->executeSearchRequest($client, $type, $payload, $state);\n\n $state->setTotal($page['total'] ?? 0);\n $this->updateLastRecordId($page, $state);\n\n // Safely iterate over results with null check\n $results = $page['results'] ?? [];\n foreach ($results as $row) {\n $state->incrementTotalRecords();\n yield $row;\n }\n\n $state->setOffset($this->getNextOffset($page));\n $state->incrementRequestCount();\n\n $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array\n {\n try {\n return $client->search($objectType, $payload);\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $result = $client->search($objectType, $payload);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $result;\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n }\n\n // RateLimitException and other exceptions are re-thrown as-is\n throw $e;\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\Pagination;\n\nuse Jiminny\\Services\\Crm\\Hubspot\\Client;\nuse Jiminny\\Services\\Crm\\Hubspot\\PayloadBuilder;\nuse Psr\\Log\\LoggerInterface;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\n\nclass HubspotPaginationService\n{\n public function __construct(\n private LoggerInterface $logger\n ) {\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n Client $client,\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n $state = new PaginationState(offset: $offset);\n $endpoint = Client::BASE_URL . \"/crm/v3/objects/{$type}/search\";\n $defaultFilter = $payload['filters'] ?? [];\n $resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;\n $teamId = $client->getConfig()->getTeam()->getId();\n $delay = $this->calculateDelayInMicroseconds();\n\n do {\n if ($this->shouldStopPagination($state, $teamId)) {\n break;\n }\n\n $payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);\n\n $this->validateTokenIfNeeded($client, $state);\n if ($state->requestCount > 0) {\n usleep($delay);\n }\n\n $page = $this->executeSearchRequest($client, $type, $payload, $state);\n\n $state->setTotal($page['total'] ?? 0);\n $this->updateLastRecordId($page, $state);\n\n // Safely iterate over results with null check\n $results = $page['results'] ?? [];\n foreach ($results as $row) {\n $state->incrementTotalRecords();\n yield $row;\n }\n\n $state->setOffset($this->getNextOffset($page));\n $state->incrementRequestCount();\n\n $this->logPaginationProgress($state, $teamId, $endpoint);\n } while ($state->offset && ! empty($page['results']));\n\n // Log final pagination completion stats\n $this->logger->info('[Hubspot] Pagination completed', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'total_requests' => $state->requestCount,\n 'total_records_fetched' => $state->totalRecords,\n 'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),\n 'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,\n ]);\n\n // Update reference parameters\n $total = $state->total;\n $lastRecordId = $state->lastRecordId;\n }\n\n private function shouldStopPagination(PaginationState $state, int $teamId): bool\n {\n if ($state->hasReachedSafetyLimit()) {\n $this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [\n 'team_id' => $teamId,\n 'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,\n 'total_fetched' => $state->totalRecords,\n ]);\n\n return true;\n }\n\n return false;\n }\n\n private function handlePaginationStrategy(\n array $payload,\n array $defaultFilter,\n PaginationState $state,\n int $resultsPerPage,\n int $teamId\n ): array {\n if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {\n $payload['filters'] = $defaultFilter;\n $payload['filters'][] = [\n 'propertyName' => 'hs_object_id',\n 'operator' => 'LT',\n 'value' => $state->lastRecordId,\n ];\n\n $this->logger->info('[Hubspot] Search keyset pagination request', [\n 'team_id' => $teamId,\n 'sequence' => $state->requestCount,\n 'itemsPerPage' => $resultsPerPage,\n 'payload' => $payload,\n 'total' => $state->total,\n ]);\n\n unset($payload['after']);\n $state->setOffset(0);\n }\n\n if ($state->offset) {\n $payload['after'] = $state->offset;\n }\n\n return $payload;\n }\n\n private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool\n {\n // Check if we've hit the offset limit\n $shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;\n\n if ($shouldSwitch && $state->lastRecordId === null) {\n $this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [\n 'request_count' => $state->requestCount,\n 'current_offset' => $state->offset,\n 'results_per_page' => $resultsPerPage,\n 'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,\n ]);\n\n return false; // Continue with offset pagination\n }\n\n return $shouldSwitch;\n }\n\n private function validateTokenIfNeeded(Client $client, PaginationState $state): void\n {\n if ($state->shouldValidateToken()) {\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n }\n }\n\n private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array\n {\n try {\n return $client->search($objectType, $payload);\n } catch (\\Exception $e) {\n if ($client->isUnauthorizedException($e)) {\n $this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'error' => $e->getMessage(),\n ]);\n\n $client->ensureValidToken();\n $state->updateLastTokenCheck();\n\n try {\n $result = $client->search($objectType, $payload);\n\n $this->logger->info('[Hubspot] Token refresh and retry successful', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n ]);\n\n return $result;\n } catch (\\Exception $retryException) {\n $this->logger->error('[Hubspot] Retry request failed after token refresh', [\n 'team_id' => $client->getConfig()->getTeam()->getId(),\n 'original_error' => $e->getMessage(),\n 'retry_error' => $retryException->getMessage(),\n ]);\n\n throw $retryException;\n }\n }\n\n // RateLimitException and other exceptions are re-thrown as-is\n throw $e;\n }\n }\n\n private function updateLastRecordId(array $page, PaginationState $state): void\n {\n $lastRecord = ! empty($page['results']) ? end($page['results']) : null;\n $lastRecordId = $lastRecord['id'] ?? null;\n $state->updateLastRecordId($lastRecordId);\n }\n\n private function getNextOffset(array $page): int\n {\n return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;\n }\n\n private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void\n {\n if ($state->shouldLogProgress()) {\n $this->logger->info('[Hubspot] Pagination progress log', [\n 'team_id' => $teamId,\n 'endpoint' => $endpoint,\n 'requests_made' => $state->requestCount,\n 'records_fetched' => $state->totalRecords,\n 'elapsed_seconds' => $state->getElapsedSeconds(),\n ]);\n }\n }\n\n private function calculateDelayInMicroseconds(): int\n {\n return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-407834189715517514
|
-5733694816344956437
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
12
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\Pagination;
use Jiminny\Services\Crm\Hubspot\Client;
use Jiminny\Services\Crm\Hubspot\PayloadBuilder;
use Psr\Log\LoggerInterface;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
class HubspotPaginationService
{
public function __construct(
private LoggerInterface $logger
) {
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
Client $client,
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
$state = new PaginationState(offset: $offset);
$endpoint = Client::BASE_URL . "/crm/v3/objects/{$type}/search";
$defaultFilter = $payload['filters'] ?? [];
$resultsPerPage = PayloadBuilder::MAX_SEARCH_REQUEST_LIMIT;
$teamId = $client->getConfig()->getTeam()->getId();
$delay = $this->calculateDelayInMicroseconds();
do {
if ($this->shouldStopPagination($state, $teamId)) {
break;
}
$payload = $this->handlePaginationStrategy($payload, $defaultFilter, $state, $resultsPerPage, $teamId);
$this->validateTokenIfNeeded($client, $state);
if ($state->requestCount > 0) {
usleep($delay);
}
$page = $this->executeSearchRequest($client, $type, $payload, $state);
$state->setTotal($page['total'] ?? 0);
$this->updateLastRecordId($page, $state);
// Safely iterate over results with null check
$results = $page['results'] ?? [];
foreach ($results as $row) {
$state->incrementTotalRecords();
yield $row;
}
$state->setOffset($this->getNextOffset($page));
$state->incrementRequestCount();
$this->logPaginationProgress($state, $teamId, $endpoint);
} while ($state->offset && ! empty($page['results']));
// Log final pagination completion stats
$this->logger->info('[Hubspot] Pagination completed', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'total_requests' => $state->requestCount,
'total_records_fetched' => $state->totalRecords,
'total_elapsed_seconds' => round($state->getElapsedSeconds(), 2),
'average_seconds_per_request' => $state->requestCount > 0 ? round($state->getElapsedSeconds() / $state->requestCount, 2) : 0,
]);
// Update reference parameters
$total = $state->total;
$lastRecordId = $state->lastRecordId;
}
private function shouldStopPagination(PaginationState $state, int $teamId): bool
{
if ($state->hasReachedSafetyLimit()) {
$this->logger->warning('[Hubspot] Reached maximum request limit during pagination', [
'team_id' => $teamId,
'safety_limit' => PaginationConfig::LOOP_SAFETY_LIMIT,
'total_fetched' => $state->totalRecords,
]);
return true;
}
return false;
}
private function handlePaginationStrategy(
array $payload,
array $defaultFilter,
PaginationState $state,
int $resultsPerPage,
int $teamId
): array {
if ($this->shouldSwitchToKeysetPagination($state, $resultsPerPage)) {
$payload['filters'] = $defaultFilter;
$payload['filters'][] = [
'propertyName' => 'hs_object_id',
'operator' => 'LT',
'value' => $state->lastRecordId,
];
$this->logger->info('[Hubspot] Search keyset pagination request', [
'team_id' => $teamId,
'sequence' => $state->requestCount,
'itemsPerPage' => $resultsPerPage,
'payload' => $payload,
'total' => $state->total,
]);
unset($payload['after']);
$state->setOffset(0);
}
if ($state->offset) {
$payload['after'] = $state->offset;
}
return $payload;
}
private function shouldSwitchToKeysetPagination(PaginationState $state, int $resultsPerPage): bool
{
// Check if we've hit the offset limit
$shouldSwitch = $state->requestCount > 0 && ($state->offset + $resultsPerPage) > PaginationConfig::TOTAL_QUERY_LIMIT;
if ($shouldSwitch && $state->lastRecordId === null) {
$this->logger->warning('[Hubspot] Cannot switch to keyset pagination: lastRecordId is null', [
'request_count' => $state->requestCount,
'current_offset' => $state->offset,
'results_per_page' => $resultsPerPage,
'total_query_limit' => PaginationConfig::TOTAL_QUERY_LIMIT,
]);
return false; // Continue with offset pagination
}
return $shouldSwitch;
}
private function validateTokenIfNeeded(Client $client, PaginationState $state): void
{
if ($state->shouldValidateToken()) {
$client->ensureValidToken();
$state->updateLastTokenCheck();
}
}
private function executeSearchRequest(Client $client, string $objectType, array $payload, PaginationState $state): array
{
try {
return $client->search($objectType, $payload);
} catch (\Exception $e) {
if ($client->isUnauthorizedException($e)) {
$this->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'error' => $e->getMessage(),
]);
$client->ensureValidToken();
$state->updateLastTokenCheck();
try {
$result = $client->search($objectType, $payload);
$this->logger->info('[Hubspot] Token refresh and retry successful', [
'team_id' => $client->getConfig()->getTeam()->getId(),
]);
return $result;
} catch (\Exception $retryException) {
$this->logger->error('[Hubspot] Retry request failed after token refresh', [
'team_id' => $client->getConfig()->getTeam()->getId(),
'original_error' => $e->getMessage(),
'retry_error' => $retryException->getMessage(),
]);
throw $retryException;
}
}
// RateLimitException and other exceptions are re-thrown as-is
throw $e;
}
}
private function updateLastRecordId(array $page, PaginationState $state): void
{
$lastRecord = ! empty($page['results']) ? end($page['results']) : null;
$lastRecordId = $lastRecord['id'] ?? null;
$state->updateLastRecordId($lastRecordId);
}
private function getNextOffset(array $page): int
{
return isset($page['paging']['next']['after']) ? (int) $page['paging']['next']['after'] : 0;
}
private function logPaginationProgress(PaginationState $state, int $teamId, string $endpoint): void
{
if ($state->shouldLogProgress()) {
$this->logger->info('[Hubspot] Pagination progress log', [
'team_id' => $teamId,
'endpoint' => $endpoint,
'requests_made' => $state->requestCount,
'records_fetched' => $state->totalRecords,
'elapsed_seconds' => $state->getElapsedSeconds(),
]);
}
}
private function calculateDelayInMicroseconds(): int
{
return (int) (1 / PaginationConfig::SEARCH_RPS_LIMIT * 1000000);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16405
|
735
|
33
|
2026-05-11T08:49:04.603498+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489344603_m2.jpg...
|
PhpStorm
|
faVsco.js – RateLimitException.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5149590296267362150
|
-8708823570875044926
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
PhostormVIewINavicarecodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-limroledey© HubspotWebhoc© HubspotSyncStrategyBase.phpv @ PaginationC Paginationcontic* RateLimitexC) Paginationstate•_ Prospectsearchstr> 0 RedisC) ProviderRateLimiter.phpC) PaqinationConfia.phpv D ServiceTraitsclass HubsootPaginationServicem A12 ^ v# Opportunitysync+ SyncermEntitiesT SuncFieldstrait.T Writecrmtrait.p•DUts• WeonookC) BatchSvncCollectoC) BatchSvncRedisSe© Client.phpC) ClosedDealStadessG DealFieldsService.p© DecorateActivity.ph© FieldDefinitions.phpC) SieldTvneConverte(0) HubsnotClientinter© HubspotTokenManUPayloadsunlder.pnp 101G DomatoermAhiontiUa) DocnoncoNlormalizec) service.ono© SyncFieldAction.ph© SyncRelatedActivity 106c) WebhooksyncBatcC IntegrationApp› Accessors• W Api|• contioMDTO• FiltersaobsServiceTraitsC) Dataclient.ohoC) DecorateActivitv.ofC LocalSearch.nhn(0 Loca|Searchinterfad© RemoteSearch.php© Service.phpv D Listeners© ConvertLeadActivite Duraol aokunGachalM Motadata• M Miarationpublic function getpaginatedbataGenerator'total_records_fetched' => Sstate->totalRecords,Itotall elansed seconds: => roundisstate->aetslansedSecondso. orecision: 7).'average_seconds_per_request' => $state-›requestCount › 0 ? round( num: $state->getElapsedSeconds(// Update reference parametersStotal = $state->total;$lastRecordId = $state->lastRecordId;private function shouldStopPagination(PaqinationState $state, int SteamId): boolf...}private function handlePaginationStrategy(array Spayloadarrav soetaultrzlter.PaginationState $state,arrav "...;private function shouldSwitchToKeysetPagination(PaginationState $state, int SresultsPerPage): boolt...,private function validateTokenIfNeeded(Client Sclient, PaginationState $state): voidt...}lusageprivate function executeSearchRequest(Client Sclient, string SobjectType, array Spayload, PaginationStatetryfreturn $client->search(SobjectType, Spayload);} catch (\Exception $e) {i4 (6cljont-sicllnauthonigedFycention(6o))SSthis->logger->warning('[Hubspot] Got 401 during pagination, attempting token refresh'. ['team id' => Sclient-›qetConfiq(->qetTeam@->qetIdo'error' => $e->qetMessage(1:Scuient->ensureValidTokenosolner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)25A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console leu)# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"Concent-lvoe". "apolicacionison charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-S0F"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSUbDomains: preload"),"access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"7"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RV("group\":\"cf-nel\".("max_age\":604800}"],"NEL"L"1"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545• suppont Dally • In 3h 11m100% 2• Mon 11 May 11:49:04AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re+0 ..ReasonRateLimitException.phpRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int retry after) instead of arraySimpler: no policy to trackDrop policy from RateL1m1tException constructorMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5 →1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceofMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAtter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iohs with delav 1-6c (chean evcles. all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch. no siob→>failo, no excention fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue cvcles per second per worken• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successtul calls/s — HubSoot's limit))• Same final outcome (29k succeed. 291k fail at T-30min)|MetricPrevious (this round)This roundSuccessful jobs in 30min9,0009,000Wasted HubSpot API calls~10,800~10,800Job pop cycles/sec~50-100~100-250|Log entries (with sampling)~10000~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-side throttlingG al ... (2 files with chanaesann/lohe/Crm/M MatchActivitvCrmData.nhn 412-8View allann/lobs/Middleware/M HandleHubsnotRatelimit.nhn +12-20ot/m Client.oholReiect allAccent allAsk anvthina (&4L)+ « CodeClaude Onus 4.7 MediumWN Windsurf Toams 26.52 UTF.Rio 4 spaces...
|
16402
|
NULL
|
NULL
|
NULL
|
|
16406
|
735
|
34
|
2026-05-11T08:49:07.851796+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489347851_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.1811652,"width":0.29886967,"height":0.8188348},"on_screen":true,"lines":[{"char_start":7,"char_count":25,"bounds":{"left":0.11968085,"top":0.0,"width":0.06216755,"height":0.014365523}},{"char_start":33,"char_count":35,"bounds":{"left":0.11968085,"top":0.0,"width":0.08809841,"height":0.014365523}},{"char_start":69,"char_count":36,"bounds":{"left":0.11968085,"top":0.0047885077,"width":0.010305851,"height":0.014365523}},{"char_start":105,"char_count":43,"bounds":{"left":0.1299867,"top":0.0047885077,"width":0.0076462766,"height":0.014365523}},{"char_start":149,"char_count":4,"bounds":{"left":0.11968085,"top":0.03990423,"width":0.0076462766,"height":0.014365523}},{"char_start":153,"char_count":73,"bounds":{"left":0.11968085,"top":0.057462092,"width":0.18650267,"height":0.014365523}},{"char_start":226,"char_count":70,"bounds":{"left":0.11968085,"top":0.075019956,"width":0.17885639,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16409
|
735
|
35
|
2026-05-11T08:49:24.417423+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489364417_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.035913806,"width":0.29886967,"height":0.9640862},"on_screen":true,"lines":[{"char_start":153,"char_count":73,"bounds":{"left":0.11968085,"top":0.0,"width":0.18650267,"height":0.014365523}},{"char_start":226,"char_count":70,"bounds":{"left":0.11968085,"top":0.0,"width":0.17885639,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3982105239543516226
|
-9033075253647691314
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error...
|
16406
|
NULL
|
NULL
|
NULL
|
|
16411
|
735
|
36
|
2026-05-11T08:49:25.903275+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489365903_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1696950553548030443
|
-8348254812132364862
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-lProiect v© SyncRelatedActivityManager.php© TeardownStream.php• AiAutomationM A Renorts© HubspotSyncStrategyBase.php© ProspectCache.phpAudioAutomatedReports© RequestGenerateAskJi© RequestGenerateRepo © ProviderRateLimiter.phpC) PaqinationConfia.php© SendReportExpiringSo 11© RateLimitException.php© HandleHubspotRateLimit.php x* Job middleware that catches RateLimitException from HubSpot API calls* and releases the job back to the queue with the appropriate delaysenakeportJob.php© SendReportMailJob.ph 13C) senakeponiNorgenera> [ Calendar0 Crmv _ Delere© DeleteAccount.Job.i 16class HandleHubsootRatelimitC) DeleteContact.Job.rT DeleteCrmEntitvira 17C) DeleteleadJob.ohr© DeleteOpportunityC) VeritvActivitvermirm Hubsoot• M Salesforce(C) AutoloaDelavedToCrm(C) CheckAndRetrvRemot(C) CreateFollowuoActivit(c) CroateNotec nhnl(c) MatchActivitiocToNew(C) MatchA ctivitvCrmDatal(e [EMAIL]© saveAcuivity.onp© SaveTranscription.php© SetupLayout.php© SyncActivity.php© SyncFieldMetadata.ph© SyncHubspotObiects.r© SyncLeads.php© SyncObjects.php© SyncOpportunities.Job 21c) SvncOpportunitv.php© SyncProfileMetadata.nc) Svncireampields.00.ol© SvncTeamMetadata.of(C) Uodate@ooortunitvSoN DealRisksM Meetina3o1M Middleward(C) Patel imited nhn> M Streaminalprivate const int MAX RETRY_DELAY = 600:private const int MIN RETRY DELAY = 1private const int MAX_RATE_LIMIT_ATTEMPTS = 20;Renectorivate const int WUFTER SENINis = 5°public function handle(object $job, callable Snext): voidtry 1Snext(Siob):} catch (RateLimitException $e) {1t 00->attemotso ›= selt::MAX RAIELIMLLAITEOPISO %ILo0::error(' HandLeHubspotRatelimit Rate Limit attemot Limit reached. qivinouonReject'attemntsl => Siob->attemntsou'rate_limit_message' => $e->getMessage.D:throw se:Sdelay = max( value: self::MIN_RETRY_DELAY, min($e->getRetryAfterO.$delay += random_int(0, self::JITTER_SECONDS):...values: self::MAX_RETRY_DELAY)):SretrvAften = Se->aetRetrvAfter@eSdelav = maxiself:•MTN RETRY DELAY min SretrvAften self.•MAX RETRY DELAY )•Log: :info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay'. [Inate limi+ mescage! => Se->ae+Mescage@).Sattemots = Siob->attemotso:if (Sattemots <= 3 |l Sattemots % 10 === 0) {Loo: : info( message•'HandleHubsnotRateLimit Rate Limit cauaht, releasino ioh with delav!.Iiliah abággedits lid v Accept File *+ X Reject File t 2 €Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)=custom.log ^A SF (jiminny@localhost]4 HS_local [jiminny@localhost]# console [PKOb.# console leu)# console [slAGiNg).2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {w19 .Vheaders'1"Vace". "Inu,ur May 2020 14.21.15 6Ml"Jn"Transfer-Encoding": ["chunked"]."CF-Ray": ["9f80deb8db60dc3a-SOF"]."CF-Cache-Status": L"DYNAMIC"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSUbDomains: preload"),acceot-encodino"."access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-1AD\""],"x-content-tvoe-ootions":"nosniff"."x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWI("group\":\"cf-nel\".("max_age\":604800}"],"NEL":["{"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545• suppont Dally • In 3h 11m100% 2• Mon 11 May 11:49:25AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re+0 ..ReasonRateLimitException.phpRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int retry after) instead of arraySimpler: no policy to trackDrop policy from RateL1m1tException constructorMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceofMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch, no siob->fail(). no exception fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:• Job retry cycle is faster (delay 1-6s instead of 5-10s) → ~2x more queue cycles per second per worker• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successtul calls/s — HubSoot's limit))• Same final outcome (29k succeed 201k fail at T-20min)MetricSuccessful jobs in 30minPrevious (this round)This roundWasted HubSpot API callsJob pop cycles/sec9,000~10,800~50-1009,000~10,800~100-250|Log entries (with sampling)0000.~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-cide throttlinaG al ... (2 files with chanaesann/lohe/Crm/M MatchActivitvCrmData.nhn 412-8View allapp/Jobs/Middleware/ HandleHubspotRateLimit.php +12 -20ot/m Client.oholReiect allAccent allilAsk anvthina (84L)+ « CodeClaude Onus 4.7 MediumW Windsurf Toams 18.27 (14 charc)UTE.Rio 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16413
|
NULL
|
0
|
2026-05-11T08:49:30.491865+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489370491_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.035913806,"width":0.29886967,"height":0.9640862},"on_screen":true,"lines":[{"char_start":153,"char_count":73,"bounds":{"left":0.11968085,"top":0.0,"width":0.18650267,"height":0.014365523}},{"char_start":226,"char_count":70,"bounds":{"left":0.11968085,"top":0.0,"width":0.17885639,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16411
|
NULL
|
NULL
|
NULL
|
|
16415
|
737
|
0
|
2026-05-11T08:49:54.772636+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489394772_m2.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Undo
Redo
Cut
Copy
Paste
Paste and Match Style
Sel Undo
Redo
Cut
Copy
Paste
Paste and Match Style
Select All
Open DevTools...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Undo","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03158245,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redo","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03158245,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cut","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03158245,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03158245,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Paste","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03158245,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Paste and Match Style","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03158245,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Select All","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03158245,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Open DevTools","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03158245,"height":0.0},"on_screen":false,"role_description":"text"}]...
|
4445374797877545977
|
7802338930891525294
|
click
|
hybrid
|
NULL
|
Undo
Redo
Cut
Copy
Paste
Paste and Match Style
Sel Undo
Redo
Cut
Copy
Paste
Paste and Match Style
Select All
Open DevTools
PhostormINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-lProiect© SyncRelatedActivityManager.php© TeardownStream.php• AiAutomationM A Renorts© HubspotSyncStrategyBase.php© ProspectCache.phpAudioAutomatedReports© RequestGenerateAskJi© RequestGenerateRepo © ProviderRateLimiter.phpC) PaqinationConfia.php© SendReportExpiringSo 11*RateLimitexception.php© HandleHubspotRateLimit.php x* Job middleware that catches RateLimitException from HubSpot API calls* and releases the job back to the queue with the appropriate delaysenakeportJob.php© SendReportMailJob.ph 13C) senakeponiNorgenera• U Calendar0 Crmv _ Delere© DeleteAccount.Job.i 16class HandleHubsootRatelimitC) DeleteContact.Job.rT DeleteCrmEntitvira 17C) DeleteleadJob.ohr© DeleteOpportunityC) VeritvActivitvermirm Hubsoot• M Salesforce(C) AutoloaDelavedToCrm(C) CheckAndRetrvRemoti(C) CreateFollowuoActivit(c) CroateNotec nhnl(c) MatchActivitiocToNew(C) MatchA ctivitvCrmDatal© NoteObject.php© saveAcuivity.onp© SaveTranscription.php© SetupLayout.php© SyncActivity.php© SyncFieldMetadata.ph© SyncHubspotObiects.r© SyncLeads.php© SyncObjects.php© SyncOpportunities.Job 21© SyncOpportunitv.php© SyncProfileMetadata.nc) Svncireampields.00.ol© SvncTeamMetadata.of(C) Uodate@ooortunitvSoN DealRisksM Meetina3o1M Middleward(C) Patel imited nhn> M Streaminalprivate const int MAX RETRY_DELAY = 600:private const int MIN RETRY DELAY = 1:private const int MAX_RATE_LIMIT_ATTEMPTS = 20;Renectorivate const int VUFTER SENONis = 5°public function handle(object $job, callable Snext): voidtry 1Snext(Siob):} catch (RateLimitException $e) {1t 00->attemotso ›= selt::MAX RAIELIMLLAITEOPISO %ILog: :error ('[HandleHubspotRateLimit] Rate limit attempt limit reached, giving up', ['attemntsl => Siob->attemntsou'rate_limit_message' => $e->getMessage.D:throw se:Sdelay = max( value: self::MIN_RETRY_DELAY, min($e->getRetryAfterO.$delay += random_int(0, self::JITTER_SECONDS):...values: self::MAX_RETRY_DELAY)):SretrvAften = Se->aetRetrvAfteroeSdelav = maxiself:•MTN RETRY DELAY min SretrvAften, self.«MAX RETRY DELAY))•Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay'. [Inate limi+ mescage! => Se->ae+Mescage@).Sattemots = Siob->attemotso:if (Sattemots <= 3 |l Sattemots % 10 === 0) {Loo: : infod message: "HandlelubsnotRateLimit Rate Limit cauaht, releasino ioh with delav!.ii"iah abfdeddits lid v Accept File *~ X Reject File t 2 €Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)=custom.log ^A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKOb.# console leu)# console [slAGiNg).2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {W19 ^Vheaders'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concent-lyoe. apolicacion/ison.charser=utr-on"Transfer-Encoding": ["chunked"]."CF-Ray": ["9f80deb8db60dc3a-SOF"]."CF-Cache-Status": L"DYNAMIC"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSUbDomains: preload"),acceot-encodino"."access-control-allow-credentials": "false"."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-1AD\""],"x-content-tvoe-ootions":"nosniff"."x-hubspot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"7"Set-Cookip"." c+hm=Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWI("group\":\"cf-nel\".("max_age\":604800}"],"NEL":["{"success_fraction\":0.01,"reportco. "cr-nel"max agel ":604800}"].'Server":["cloudflare"]}} {'correlation_ id":"95236535-ec98-4541-b92a-adfa73b69eab"."trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545• suppont Dally • In 3h 11m100% 2• Mon 11 May 11:49:54AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re+0 ..ReasonRateLimitException.phpRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int retry after) instead of arraySimpler: no policy to trackDrop policy from RateL1m1tException constructorMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceofMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAfter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases jobs with delay 1-6s (cheap cycles, all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch. no siob→>failo, no excention fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material changes vs the previous version:•Job retry cvcle is faster (delav 1-6s instead of 5-10s) → ~2x more queue cvcles per second per worken• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successtul calls/s — HubSoot's limit)• Same final outcome (29k succeed 201k fail at T-20min)MetricPrevious (this round)This roundSuccessful jobs in 30min9,0009,000Wasted HubSpot API calls~10,800~10,800Job pop cycles/sec~50-100~100-250|Log entries (with sampling)0000.~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-cide throttlinaG al ... (2 files with chanaesann/lohe/Crm/M MatchActView allUndoReiect allAccent alliOk explainpastePaste and Match StyleClaude OnudSelect AllOnen DevToolsW Windsurf Toams 26-12 (46 charc)UTE.Rio 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16417
|
737
|
1
|
2026-05-11T08:50:10.113876+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489410113_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.046288908,"width":0.29886967,"height":0.9537111},"on_screen":true,"lines":[{"char_start":149,"char_count":4,"bounds":{"left":0.11968085,"top":0.0,"width":0.0076462766,"height":0.014365523}},{"char_start":153,"char_count":73,"bounds":{"left":0.11968085,"top":0.0,"width":0.18650267,"height":0.014365523}},{"char_start":226,"char_count":70,"bounds":{"left":0.11968085,"top":0.0,"width":0.17885639,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16415
|
NULL
|
NULL
|
NULL
|
|
16419
|
737
|
2
|
2026-05-11T08:50:23.921278+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489423921_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-9140679751598560133
|
-8132362818571490362
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
PhostormViewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-linProiect© SyncRelatedActivityManager.php© TeardownStream.php• AiAutomationAjReports> D AudioAutomatedReports© RequestGenerateAskJi© RequestGenerateRepo© SendReportExpiringSo© SendReportJob.php© SendReportMailJob.ph© SendReportNotGenera> [ Calendar0 Crmv _ Delere© DeleteAccount.Job.l© HubspotSyncStrategyBase.phpCachedcrmservicebecorator.onp© ProspectCache.php© MatchActivityCrmData.php*RateLimitexception.php© HandleHubspotRateLimit.php xC) PaqinationConfia.php* Job middleware that catches RateLimitException from HubSpot API calls* and releases the job back to the queue with the appropriate delay2 usagesclace HandloHuheno+Patel imitC) DeleteContact.Job.rTDeleteCrmEntitviraC) DeleteleadJob.ohr© DeleteOpportunityC) VeritvActivitvermirm Hubsoot• M Salesforce© AutologDelayedToCrm 20© CheckAndRetryRemoti 21© CreateFollowupActivit: 22(c) CroateNotec nhnl© MatchActivitiesToNew 24(C) MatchA ctivitvCrmDate(e [EMAIL]© saveAcuivity.onp© SaveTranscription.php© SetupLayout.php© SyncActivity.php© SyncFieldMetadata.ph© SyncHubspotObiects.r© SyncLeads.php© SyncObjects.php© SyncOpportunities.Job© SyncOpportunitv.phr© SyncProfileMetadata.rprivate const int MAX RETRY DELAY = 600:private const Int MIN KEIKY UELAY = 11private const int MAX_RATE_LIMIT_ATTEMPTS = 20;Renect1 usageprivate const int JITTER SECONDS = 5:nublic function handlecobiect Siob. callable Snext): voidtry {Snext(Siob):} catch (RateLimitException $e) {if (Siob->attemots() >= self::MAX RATE LIMIT ATTEMPTS) {Rate limit attemot limit reached. giving up'. [Inate limit meccade!=> $e->getMessageO,D:throw se:$delay = max( value: self::MIN_RETRY_DELAY, min($e->getRetryAfterO$delay += random_int(0, self::JITTER_SECONDS)...values: self::MAX_RETRY_DELAY)):SretrvAften = Se->aetRetrvAfterolCdolav = mayicolf:*MTN PETPV NCIAV minCnotnviften colf.•MAY RETRY NELAVDEc) Svncireampields.00.ol© SvncTeamMetadata.of(C) Uodate@ooortunitvSoN DealRisksLog::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay'. ["nodclass=5100:.class.'attemots' => S1ob->attemotsol=> SretrvAfter.= Sdelav.Inate 1imit messadel => Se->ae+MecsadeOriM Meetina3o1M Middleward• Landle-ubsnotPatelin(C) Patel imited nhn> M StreaminalSattemots = Siob->attemotso:if (Sattemots <= 3 |I Sattemots % 10 === 0) $Log:: infof message: HIHAcceptFlle za tel iReiect riatseLimit caughtrergleasing job with delay'. I'oh class' => Siooumassi=custom.log~A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console leu)# console [slAGiNg)2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {headers'1"Vace". "Inu,ur May 2020 14.21.19 6Ml"Jn"concenc-lyoe. apolicacion/ison.charser=utt-on"Transfer-Encoding": ["chunked"]."CF-Ray":"9t80deb8dbo0dcsa-SOF","CF-Cache-Status": L"DYNAMIC"J,"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSUbDomains: preload"),acceot-encodino"."access-control-allow-credentials": "false"i."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-tvoe-ootions":"nosniff"."x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"Set-Cookip"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f"s"endnoints".("url\":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RW|("group\":\"cf-nel\".("max_age\":604800}"],"NEL":["{"success_fraction\":0.01,reportto. "cr-nel,"max agel ":604800}"].'Server":["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/Sboyeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545suppont Dally • In sn 10m100% 2• Mon 11 May 11:50:23AskJiminnyReportActivityServiceTest -CascadeHubspot Rate Limit Re+0 ..ReasonRateLimitException.phpRemoved policy field & methodsMiddleware doesn't need it: cache TTL handles DAILY naturallycache stores scalar int retry after) instead of arraySimpler: no policy to trackDrop policy from RateL1m1tException constructorMatch new exception signature; still log policy for observabilityRemoved DAILY LIMIT branchretryUntil + long cache TTL handle it; saves complexityMIN RETRY DELAY 5→1Named JITTER SECONDS constantSelf-documentingCollapsed dual catch into single catch + instanceofMore readable; no awkward empty rethrow blockHow DAILY LIMIT now flows (no special case needed)1. HubSpot returns 429 with policyName: DAILY_LIMIT2. parseRetryAtter sees no Retry-After header, falls through to policy table → returns 600s (the DAILY_LIMIT detault lleft in parseRetryAfter)3. Cache populated with TTL=600 (10 min)4. All subsequent requests fast-fail via cache for 10 min - no API calls5. Middleware releases iohs with delav 1-6c (chean evcles. all hit cache)6. After 30 min, retryUntil expires → jobs permanent-fail naturally7. No special branch. no siob→>failo, no excention fieldThe system converges to the same outcome with less code.Re-running the 100k scenario (delta from previous run)Material chandes vs the previous version:• Job retry cycle is faster (delay 1-6s instead of 5-10s) → ~2x more queue cycles per second per worker• More cache hits per second (since cycles are faster) - but cache GETs are cheap (~0.1ms)• Same throughout ceilina (5 successful calls/s — HubSoot's limit)• Same final outcome (29k succeed 201k fail at T-20min)MetricSuccessful jobs in 30minPrevious (this round)This round9,000Wasted HubSpot API calls~10,800Job pop cycles/sec~50-1009,000~10,800~100-250|Log entries (with sampling)0000.~10.000Averade delav ner releace275gThe faster retry cycle gives you slightly better responsiveness when the cache window expires (more "lottery tickets" at HubSpot's open second), but doesn'tThe fundamental remaining issue is unchanged: 30 min x 5 RPS = 9k jobs ceiling. To process all 100k, you either need ~6 hours window, or batch-endpointredecian. or disnatch-side throttlingG al ... (2 files with chanaesann/lohe/Crm/MMatchActivitvCrmData.nhn 412-8View allapp/Jobs/Middleware/ HandleHubspotRateLimit.php +12 -20ot/m Client.oholReiect allAccent alliOk explain $delay += random int(0, self«JITTER SECONDS): It also seems that before the and then lets run the scenario again.Claude Onus 4.7 MediumW Windsurf Toams 26-12 (46 charc)UTE.8io 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16420
|
737
|
3
|
2026-05-11T08:50:29.636356+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489429636_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16419
|
NULL
|
NULL
|
NULL
|
|
16421
|
737
|
4
|
2026-05-11T08:50:37.639012+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489437639_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-151145521871747825
|
-9033072985368088114
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16423
|
737
|
5
|
2026-05-11T08:50:42.026387+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489442026_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"lines":[{"char_start":207,"char_count":30,"bounds":{"left":0.42885637,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":237,"char_count":36,"bounds":{"left":0.42885637,"top":0.0,"width":0.09075798,"height":0.014365523}},{"char_start":273,"char_count":32,"bounds":{"left":0.42885637,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.42885637,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.42885637,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.42885637,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.42885637,"top":0.008778931,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.42885637,"top":0.026336791,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.42885637,"top":0.043894652,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.42885637,"top":0.061452515,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.42885637,"top":0.079010375,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.42885637,"top":0.096568234,"width":0.56515956,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.42885637,"top":0.11412609,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.42885637,"top":0.13168396,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.42885637,"top":0.14924182,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.42885637,"top":0.16679968,"width":0.52360374,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.42885637,"top":0.18435754,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.42885637,"top":0.2019154,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.42885637,"top":0.21947326,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.42885637,"top":0.23703113,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.42885637,"top":0.254589,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.42885637,"top":0.27214685,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.42885637,"top":0.2897047,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.42885637,"top":0.30726257,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3796536579749804112
|
-7516476465275915830
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
16421
|
NULL
|
NULL
|
NULL
|