4 Commits

19 changed files with 490 additions and 471 deletions

View File

@@ -5,8 +5,6 @@ namespace App\Browser;
use App\Models\Job; use App\Models\Job;
use App\Models\JobArtifact; use App\Models\JobArtifact;
use App\Models\JobRun; use App\Models\JobRun;
use App\Notification\Notifications\JobErrorNotification;
use App\Notification\Providers\AllNotification;
use Closure; use Closure;
use Exception; use Exception;
use Facebook\WebDriver\Chrome\ChromeOptions; use Facebook\WebDriver\Chrome\ChromeOptions;
@@ -58,8 +56,7 @@ abstract class BrowserJob implements ShouldQueue
// throw $e; // throw $e;
} }
catch (Throwable $e) { catch (Throwable $e) {
$browser->screenshot(JobErrorScreenshot::getFileName($this->jobId)); $browser->screenshot("failure-{$this->jobId}");
AllNotification::send(new JobErrorNotification($this->jobId, $e->getMessage()));
dump($e); dump($e);
throw $e; throw $e;
} finally { } finally {
@@ -159,6 +156,7 @@ abstract class BrowserJob implements ShouldQueue
'--whitelisted-ips=""', '--whitelisted-ips=""',
'--disable-dev-shm-usage', '--disable-dev-shm-usage',
'--user-data-dir=/home/seluser/profile/', '--user-data-dir=/home/seluser/profile/',
'--auto-open-devtools-for-tabs',
])->all()); ])->all());
return RemoteWebDriver::create( return RemoteWebDriver::create(
@@ -181,7 +179,8 @@ abstract class BrowserJob implements ShouldQueue
*/ */
protected function hasHeadlessDisabled(): bool protected function hasHeadlessDisabled(): bool
{ {
return config('dusk.headlessDisabled', false); return isset($_SERVER['DUSK_HEADLESS_DISABLED']) ||
isset($_ENV['DUSK_HEADLESS_DISABLED']);
} }
/** /**
@@ -189,7 +188,8 @@ abstract class BrowserJob implements ShouldQueue
*/ */
protected function shouldStartMaximized(): bool protected function shouldStartMaximized(): bool
{ {
return config('dusk.shouldStartMaximized', false); return isset($_SERVER['DUSK_START_MAXIMIZED']) ||
isset($_ENV['DUSK_START_MAXIMIZED']);
} }
/** /**

View File

@@ -0,0 +1,47 @@
<?php
namespace App\Browser\Components\Hellcase;
use Laravel\Dusk\Browser;
use Laravel\Dusk\Component as BaseComponent;
class EpicGamesLogin extends BaseComponent
{
/**
* Get the root selector for the component.
*/
public function selector(): string
{
return 'form';
}
/**
* Assert that the browser page contains the component.
*/
public function assert(Browser $browser): void
{
$browser->assertVisible($this->selector());
}
/**
* Get the element shortcuts for the component.
*
* @return array<string, string>
*/
public function elements(): array
{
return [
'@email' => 'input#email',
'@password' => 'input#password',
'@signin-button' => 'button[type="submit"]',
];
}
public function fillForm(Browser $browser, $email, $password) {
$browser->type('@email', $email);
sleep(1);
$browser->type('@password', $password);
sleep(1);
$browser->click('@signin-button');
}
}

View File

@@ -1,27 +0,0 @@
<?php
namespace App\Browser;
use Laravel\Dusk\Browser;
use function rtrim;
class JobDebugScreenshot {
public const IMG_FILE_NAME = "debug-";
public static function getFileName(int $jobId): string {
return static::IMG_FILE_NAME . $jobId . ".png";
}
public static function getImgFileAbsolutePath(int $jobId): string {
return rtrim(Browser::$storeScreenshotsAt, '/') . "/" . static::getFileName($jobId);
}
public static function getImgFileProjectPath(int $jobId): string {
return app_path("Browser/screenshots/" . static::getFileName($jobId));
}
public static function getImgFileExternalPath(int $jobId): string {
return "screenshots/" . static::getFileName($jobId);
}
}

View File

@@ -1,27 +0,0 @@
<?php
namespace App\Browser;
use Laravel\Dusk\Browser;
use function rtrim;
class JobErrorScreenshot {
public const IMG_FILE_NAME = "failure-";
public static function getFileName(int $jobId): string {
return static::IMG_FILE_NAME . $jobId . ".png";
}
public static function getImgFileAbsolutePath(int $jobId): string {
return rtrim(Browser::$storeScreenshotsAt, '/') . "/" . static::getFileName($jobId);
}
public static function getImgFileProjectPath(int $jobId): string {
return app_path("Browser/screenshots/" . static::getFileName($jobId));
}
public static function getImgFileExternalPath(int $jobId): string {
return "screenshots/" . static::getFileName($jobId);
}
}

View File

@@ -0,0 +1,174 @@
<?php
namespace App\Browser\Jobs\EpicGames;
use App\Browser\BrowserJob;
use App\Browser\Components\Hellcase\EpicGamesLogin;
use App\Models\JobInfo;
use App\Models\JobRun;
use App\Notification\Notifications\SimpleNotification;
use App\Notification\Providers\AllNotification;
use Exception;
use Facebook\WebDriver\WebDriverBy;
use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;
use Illuminate\Support\Facades\Log;
use Laravel\Dusk\Browser;
class EpicGamesJob extends BrowserJob implements ShouldBeUniqueUntilProcessing
{
private const APPROXIMATIVE_RUNNING_MINUTES = 2;
private const WEBSITE_URL = "https://www.epicgames.com/store/en-US/";
private JobRun $jobRun;
public function __construct()
{
Log::info("Constructing " . self::class);
parent::__construct(3);
}
public function run(Browser $browser): ?JobRun
{
// $browser->visit("https://bscscan.com/contractsVerified");
// sleep(3);
Log::info("Running " . self::class);
$this->jobRun = new JobRun([
"job_id" => $this->jobId,
"success" => false,
]);
$this->jobRun->save();
// $this->goToEpicGamesWebsite($browser);
// $this->removePopups($browser);
sleep(5);
$this->signin($browser);
$this->getFreeGames($browser);
$this->jobRun->success = true;
$this->jobRun->save();
Log::info(self::class . " run ended");
return $this->jobRun;
}
/**
* @inheritDoc
*/
public function runTest(Browser $browser): ?JobRun
{
try {
$this->goToEpicGamesWebsite($browser);
sleep(2);
$this->removePopups($browser);
sleep(2);
$this->signin($browser);
return $this->makeSimpleJobRun(
true,
"Connexion réussie",
"Datboi a réussi à se connecter sur EpicGames"
);
} catch (Exception $e) {
return $this->makeSimpleJobRun(
true,
"Connexion échouée",
"Datboi n'a pas réussi à se connecter sur EpicGames :\n" . $e->getMessage()
);
}
}
private function goToEpicGamesWebsite(Browser $browser)
{
sleep(3);
$browser->visit(self::WEBSITE_URL);
sleep(3);
$this->assertNotDetected($browser);
$browser->waitForText("Store", 30, true);
}
private function signin(Browser $browser)
{
// $browser->visit("https://store.epicgames.com/login?state=%2Fen-US%2F");
$browser->driver->executeScript('window.open("https://store.epicgames.com/login?state=%2Fen-US%2F")');
sleep(5);
$this->assertNotDetected($browser);
$browser->waitForText("Sign In", 30, true);
sleep(3);
$jobInfos = JobInfo::where("job_id", $this->jobId)->get();
$email = $jobInfos->where("key", "epicgames_account_email")->first()->value;
$password = $jobInfos->where("key", "epicgames_account_password")->first()->value;
$browser->within(new EpicGamesLogin, function (Browser $browser) use ($email, $password) {
$browser->fillForm($email, $password);
});
sleep(40);
}
private function getFreeGames(Browser $browser)
{
$browser->driver->executeScript('window.open("https://www.epicgames.com/store/en-US/free-games")');
// $browser->visit('https://www.epicgames.com/store/en-US/free-games');
$browser->waitForText("Free Games", 30, true);
$freeGamesLinkElements = $browser->driver->findElements(WebDriverBy::xpath('//a[contains(@aria-label, "Free Now")]'));
$freeGamesLinks = [];
foreach ($freeGamesLinkElements as $element) {
$freeGamesLinks[] = $element->getAttribute("href");
}
foreach ($freeGamesLinks as $link) {
$browser->visit($link);
$this->claimCurrentGame($browser);
}
}
private function claimCurrentGame(Browser $browser)
{
sleep(5);
$this->assertNotDetected($browser);
if ($this->unratedContent($browser)) {
throw new Exception("Le jeu demande un âge et datboi a la flemme de le mettre");
}
$this->waitForAndClickElementContainingText($browser, '//button', "Get", 30, true);
sleep(5);
$this->assertNotDetected($browser);
$browser->waitForText("Place Order", 30, true);
$browser->click("Place Order");
sleep(5);
$this->assertNotDetected($browser);
$browser->waitForText("Order Confirmation", 30, true);
$browser->click("Close");
sleep(5);
AllNotification::send(
new SimpleNotification($this->jobId, "Un jeu a été ajouté à votre bibliothèque", "Un jeu a été ajouté à votre bibliothèque EpicGames")
);
}
private function unratedContent(Browser $browser)
{
try {
$browser->waitForText("please provide your date of birth", 5, true);
return true;
} catch (Exception $_) {
return false;
}
}
private function removePopups(Browser $browser)
{
// $browser->script('document.querySelector("div.app-modal")[0].remove();');
// $browser->driver->executeScript('document.querySelector("div.app-modal")[0].remove();');
}
private function assertNotDetected(Browser $browser)
{
try {
$browser->waitForText("One more step", 10, true);
} catch (Exception $_) {
return;
}
throw new Exception("Détecté par cloudflare");
}
}

View File

@@ -4,7 +4,6 @@ namespace App\Browser\Jobs\Hellcase;
use App\Browser\BrowserJob; use App\Browser\BrowserJob;
use App\Browser\Components\Hellcase\MainNav; use App\Browser\Components\Hellcase\MainNav;
use App\Browser\JobDebugScreenshot;
use App\Browser\Jobs\Hellcase\HellcaseLoginQrCode; use App\Browser\Jobs\Hellcase\HellcaseLoginQrCode;
use App\Models\JobArtifact; use App\Models\JobArtifact;
use App\Models\JobRun; use App\Models\JobRun;
@@ -12,8 +11,6 @@ use App\Notification\NotificationBody\Hellcase\HellcaseNotificationDailyFreeBody
use App\Notification\NotificationBody\Hellcase\HellcaseNotificationLoginBody; use App\Notification\NotificationBody\Hellcase\HellcaseNotificationLoginBody;
use App\Notification\Notifications\Hellcase\HellcaseNotificationDailyFree; use App\Notification\Notifications\Hellcase\HellcaseNotificationDailyFree;
use App\Notification\Notifications\Hellcase\HellcaseNotificationLogin; use App\Notification\Notifications\Hellcase\HellcaseNotificationLogin;
use App\Notification\Notifications\JobDebugNotification;
use App\Notification\Notifications\JobErrorNotification;
use App\Notification\Providers\AllNotification; use App\Notification\Providers\AllNotification;
use Facebook\WebDriver\WebDriverBy; use Facebook\WebDriver\WebDriverBy;
use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;
@@ -24,42 +21,37 @@ class HellcaseJob extends BrowserJob implements ShouldBeUniqueUntilProcessing
{ {
private const STEAM_LOGIN_THRESHOLD = 5 * 60; // 5 minutes private const STEAM_LOGIN_THRESHOLD = 5 * 60; // 5 minutes
private const APPROXIMATIVE_RUNNING_MINUTES = 2; private const APPROXIMATIVE_RUNNING_MINUTES = 2;
private const WEBSITE_URL = "https://hellcase.com";
private JobRun $jobRun; private JobRun $jobRun;
public function __construct() public function __construct()
{ {
Log::info("Constructing HellcaseJob"); Log::info("Constructing " . self::class);
parent::__construct(2); parent::__construct(2);
} }
public function run(Browser $browser): ?JobRun public function run(Browser $browser): ?JobRun
{ {
Log::info("Running HellcaseJob"); Log::info("Running " . self::class);
$this->jobRun = new JobRun([ $this->jobRun = new JobRun([
"job_id" => $this->jobId, "job_id" => $this->jobId,
"success" => false, "success" => false,
]); ]);
$this->jobRun->save(); $this->jobRun->save();
$browser->visit('https://hellcase.com'); $browser->visit(self::WEBSITE_URL);
$browser->waitForText("CASES", 30, true); $browser->waitForText("CASES", 30, true);
$this->removePopups($browser); $this->removePopups($browser);
sleep(5); sleep(5);
$this->signin($browser); $this->signin($browser);
try { $this->joinFreeGiveaways($browser);
$this->joinFreeGiveaways($browser);
} catch (\Exception $e) {
$this->jobRun->success = false;
$this->jobRun->save();
AllNotification::send(new JobErrorNotification($this->jobId, "Erreur lors de la participation aux concours gratuits", $e->getMessage()));
}
$this->getDailyFree($browser); $this->getDailyFree($browser);
$this->jobRun->success = true; $this->jobRun->success = true;
$this->jobRun->save(); $this->jobRun->save();
Log::info("HellcaseJob run ended"); Log::info(self::class . " run ended");
return $this->jobRun; return $this->jobRun;
} }
@@ -70,7 +62,7 @@ class HellcaseJob extends BrowserJob implements ShouldBeUniqueUntilProcessing
public function runTest(Browser $browser): ?JobRun public function runTest(Browser $browser): ?JobRun
{ {
try { try {
$browser->visit('https://hellcase.com'); $browser->visit(self::WEBSITE_URL);
$browser->waitForText("CASES", 30, true); $browser->waitForText("CASES", 30, true);
$this->removePopups($browser); $this->removePopups($browser);
sleep(2); sleep(2);
@@ -100,20 +92,13 @@ class HellcaseJob extends BrowserJob implements ShouldBeUniqueUntilProcessing
sleep(5); sleep(5);
$browser->waitForText("Sign in with Steam", 30, true); $browser->waitForText("Sign in with Steam", 30, true);
sleep(3); sleep(3);
$browser->driver->findElement(WebDriverBy::xpath('//button[contains(@class,"_base_zvftr_1 _accent-1_zvftr_105 _m_zvftr_52 _full_zvftr_94 _primary_zvftr_100")]'))->click(); $browser->driver->findElement(WebDriverBy::xpath('//button[@class = "_base_1uydq_1 _accent-1_1uydq_105 _m_1uydq_52 _full_1uydq_94 _primary_1uydq_100"]'))->click();
sleep(5); sleep(5);
// QR CODE SCANNING // QR CODE SCANNING
try { try {
$browser->waitForTextIn("div", "Or sign in with QR", 30, true); $browser->waitForTextIn("div", "Or sign in with QR", 30, true);
sleep(10); $qrCode = $browser->driver->findElement(WebDriverBy::xpath('//div[./*[contains(text(), "Or sign in with QR")]]'));
try {
$qrCode = $browser->driver->findElement(WebDriverBy::xpath('//div[./*[contains(text(), "Or sign in with QR")]]'));
} catch (\Exception $e) {
$browser->screenshot(JobDebugScreenshot::getFileName($this->jobId));
AllNotification::send(new JobDebugNotification($this->jobId, "Le QR code de la page de connexion de Steam n'a pas été trouvé"));
throw $e;
}
// Wait to be redirected to the Steam login page, while waiting take a new screenshot every 30 seconds // Wait to be redirected to the Steam login page, while waiting take a new screenshot every 30 seconds
$isBackOnHellcase = false; $isBackOnHellcase = false;
@@ -138,11 +123,9 @@ class HellcaseJob extends BrowserJob implements ShouldBeUniqueUntilProcessing
} }
} catch (\Exception $e) { } catch (\Exception $e) {
// If the QR code is not found, we are not on the QR code page // If the QR code is not found, we are not on the QR code page
Log::debug("Exception because qrcode not found : " . $e);
$isBackOnHellcase = true; $isBackOnHellcase = true;
} catch (\Throwable $e) { } catch (\Throwable $e) {
// If the QR code is not found, we are not on the QR code page // If the QR code is not found, we are not on the QR code page
Log::debug("Exception because qrcode not found : " . $e);
$isBackOnHellcase = true; $isBackOnHellcase = true;
} }
@@ -159,8 +142,6 @@ class HellcaseJob extends BrowserJob implements ShouldBeUniqueUntilProcessing
try { try {
$buttons = $browser->driver->findElements(WebDriverBy::xpath('//a[text() = "Join for free"]')); $buttons = $browser->driver->findElements(WebDriverBy::xpath('//a[text() = "Join for free"]'));
} catch (\Exception $e) { } catch (\Exception $e) {
$browser->screenshot(JobDebugScreenshot::getFileName($this->jobId));
AllNotification::send(new JobDebugNotification($this->jobId, "No join for free buttons found"));
return; return;
} }
@@ -171,27 +152,7 @@ class HellcaseJob extends BrowserJob implements ShouldBeUniqueUntilProcessing
])); ]));
} }
foreach ($buttons as $button) { foreach ($buttons as $button) {
try { $button->click();
$nextSlideButton = $browser->driver->findElement(WebDriverBy::xpath('//button[@class="_button_1ygbm_7 _next_1ygbm_24"]'));
} catch (\Exception $e) {
$browser->screenshot(JobDebugScreenshot::getFileName($this->jobId));
AllNotification::send(new JobDebugNotification($this->jobId, "No next slide button found"));
return;
}
$clickedFailsCounter = 0;
while ($clickedFailsCounter < 7 && $clickedFailsCounter > 0) {
try {
$button->click();
} catch (\Exception $e) {
$clickedFailsCounter++;
try {
$nextSlideButton->click();
} catch (\Exception $_) {}
sleep(3);
continue;
}
$clickedFailsCounter = -1;
}
sleep(5); sleep(5);
$this->joinGiveaway($browser); $this->joinGiveaway($browser);
$browser->within(new MainNav, function (Browser $browser) { $browser->within(new MainNav, function (Browser $browser) {
@@ -236,12 +197,9 @@ class HellcaseJob extends BrowserJob implements ShouldBeUniqueUntilProcessing
if ($availibleInButton->getAttribute("disabled") == "true") { if ($availibleInButton->getAttribute("disabled") == "true") {
$hours = $availibleInButton->getText(); $hours = $availibleInButton->getText();
// If the text is like "in 26 sec." we need to put one minute // If the text is like "in 26 sec." we need to put one minute
if (str_contains(strtolower($hours), "seconds")) { if (str_contains($hours, "sec")) {
$browser->screenshot(JobDebugScreenshot::getFileName($this->jobId)); $this->reschedule(1);
AllNotification::send(new JobDebugNotification($this->jobId, "I hate niggers")); return;
// $this->reschedule(1);
sleep(60);
return $this->getDailyFree($browser);
} }
$hours = explode(" ", $hours); $hours = explode(" ", $hours);
$minutes = $hours[4]; $minutes = $hours[4];

View File

@@ -4,7 +4,6 @@ namespace App\Notification;
use App\Models\Job; use App\Models\Job;
use App\Notification\Stringifiable\StringifiableSimpleText; use App\Notification\Stringifiable\StringifiableSimpleText;
use function PHPUnit\Framework\isNull;
abstract class Notification { abstract class Notification {
@@ -13,16 +12,10 @@ abstract class Notification {
public bool $isError; public bool $isError;
public function __construct(int $jobId, NotificationBody $body = null, bool $isError = false) { public function __construct(int $jobId, NotificationBody $body, bool $isError = false) {
$this->job = Job::find($jobId); $this->job = Job::find($jobId);
if ($body !== null) {
$this->body = $body;
}
$this->isError = $isError;
}
public function setBody(NotificationBody $body) {
$this->body = $body; $this->body = $body;
$this->isError = $isError;
} }
public function getTitle(): Stringifiable { public function getTitle(): Stringifiable {

View File

@@ -1,51 +0,0 @@
<?php
namespace App\Notification\NotificationBody;
use App\Models\Job;
use App\Notification\NotificationBody;
use App\Notification\Stringifiable;
class JobDebugNotificationBody extends NotificationBody {
private Job $job;
private string $body;
private ?string $error;
private bool $hasScreenshot;
public function __construct(Job $job, string $body, string $error = null, bool $hasScreenshot = false) {
$this->job = $job;
$this->body = $body;
$this->error = $error;
$this->hasScreenshot = $hasScreenshot;
}
private function constructString(bool $inMarkdown = false) {
$mdBody = "";
if ($this->body !== null) {
$mdBody .= $this->body;
}
if ($this->error !== null) {
$errorWrapper = $inMarkdown ? "```" : "";
$mdBody .= " :\n" . $errorWrapper . $this->error . $errorWrapper;
}
if ($inMarkdown && $this->hasScreenshot) {
$mdBody .= "\nScreenshot : ";
}
return $mdBody;
}
/**
* @inheritDoc
*/
public function toMarkdownString(): string {
return $this->constructString(true);
}
/**
* @inheritDoc
*/
public function toString(): string {
return $this->constructString();
}
}

View File

@@ -1,31 +0,0 @@
<?php
namespace App\Notification\NotificationBody;
use App\Models\Job;
use App\Notification\NotificationBody;
use App\Notification\Stringifiable;
class JobErrorNotificationBody extends NotificationBody {
private Job $job;
private string $error;
public function __construct(Job $job, $error) {
$this->job = $job;
$this->error = $error;
}
/**
* @inheritDoc
*/
public function toMarkdownString(): string {
return "Le job \"{$this->job->name}\" a échoué avec l'erreur :\n ```" . $this->error . "``` \nScreenshot : ";
}
/**
* @inheritDoc
*/
public function toString(): string {
return "Le job \"{$this->job->name}\" a échoué avec l'erreur :\n " . $this->error;
}
}

View File

@@ -3,9 +3,12 @@
namespace App\Notification\Notifications\Hellcase; namespace App\Notification\Notifications\Hellcase;
use App\Browser\Jobs\Hellcase\HellcaseDailyFreeScreenshot; use App\Browser\Jobs\Hellcase\HellcaseDailyFreeScreenshot;
use App\Browser\Jobs\Hellcase\HellcaseLoginQrCode;
use App\Notification\Notification; use App\Notification\Notification;
use App\Notification\Notifications\NotificationLogin;
use Laravel\Dusk\Browser;
class HellcaseNotificationDailyFree extends Notification { class HellcaseNotificationDailyFree extends NotificationLogin {
public function __construct(int $jobId, \App\Notification\NotificationBody $body) { public function __construct(int $jobId, \App\Notification\NotificationBody $body) {
parent::__construct($jobId, $body); parent::__construct($jobId, $body);

View File

@@ -1,44 +0,0 @@
<?php
namespace App\Notification\Notifications;
use App\Browser\JobDebugScreenshot;
use App\Notification\Notification;
use App\Notification\NotificationBody\JobDebugNotificationBody;
use App\Notification\Stringifiable;
use App\Notification\Stringifiable\StringifiableSimpleText;
use Illuminate\Support\Facades\Log;
class JobDebugNotification extends Notification {
private string|null $title;
private string|null $screenShotProjectPath;
public function __construct(int $jobId, string $body, string $title = null, string $error = null, ?string $screenshotProjectPath = "", bool $isError = false) {
parent::__construct($jobId, isError:$isError);
$this->title = $title;
if ($screenshotProjectPath === "") {
$screenshotProjectPath = JobDebugScreenshot::getImgFileProjectPath($jobId);
}
$this->screenShotProjectPath = $screenshotProjectPath;
$this->setBody(new JobDebugNotificationBody($this->job, $body, $error, $this->screenShotProjectPath != null));
}
public function getTitle(): Stringifiable {
return new StringifiableSimpleText($this->title ?? "DEBUG Job {$this->job->name}");
}
/**
* @inheritDoc
*/
public function getImageProjectPath(): string|null {
return $this->screenShotProjectPath;
}
/**
* @inheritDoc
*/
public function getLinkURL(): string|null {
return route('jobs.show', ['job' => $this->job->id]);
}
}

View File

@@ -1,37 +0,0 @@
<?php
namespace App\Notification\Notifications;
use App\Browser\JobErrorScreenshot;
use App\Models\Job;
use App\Notification\Notification;
use App\Notification\NotificationBody\JobErrorNotificationBody;
use App\Notification\Stringifiable;
use App\Notification\Stringifiable\StringifiableSimpleText;
use Illuminate\Support\Facades\Log;
class JobErrorNotification extends Notification {
public function __construct(int $jobId, string $error) {
parent::__construct($jobId, isError:true);
$this->setBody(new JobErrorNotificationBody($this->job, $error));
}
public function getTitle(): Stringifiable {
return new StringifiableSimpleText("Le job {$this->job->name} a échoué");
}
/**
* @inheritDoc
*/
public function getImageProjectPath(): string|null {
return JobErrorScreenshot::getImgFileProjectPath($this->job->id);
}
/**
* @inheritDoc
*/
public function getLinkURL(): string|null {
return route('jobs.show', ['job' => $this->job->id]);
}
}

View File

@@ -3,6 +3,9 @@
namespace App\Notification\Providers; namespace App\Notification\Providers;
use App\Notification\NotificationProvider; use App\Notification\NotificationProvider;
use App\Notification\INotificationProvider;
use App\Models\JobInfo;
use Illuminate\Support\Facades\Cache;
class AllNotification extends NotificationProvider { class AllNotification extends NotificationProvider {
private const NOTIFICATIONS_PROVIDERS = [ private const NOTIFICATIONS_PROVIDERS = [

View File

@@ -3,6 +3,7 @@
namespace App\Notification\Providers; namespace App\Notification\Providers;
use App\Notification\NotificationProvider; use App\Notification\NotificationProvider;
use App\Notification\INotificationProvider;
use App\Models\JobInfo; use App\Models\JobInfo;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;

View File

@@ -13,7 +13,7 @@
"erusev/parsedown": "^1.7", "erusev/parsedown": "^1.7",
"inertiajs/inertia-laravel": "^2.0", "inertiajs/inertia-laravel": "^2.0",
"laravel/dusk": "^8.2", "laravel/dusk": "^8.2",
"laravel/framework": "^12.0", "laravel/framework": "^11.31",
"laravel/reverb": "^1.0", "laravel/reverb": "^1.0",
"laravel/sanctum": "^4.0", "laravel/sanctum": "^4.0",
"laravel/telescope": "^5.5", "laravel/telescope": "^5.5",

369
composer.lock generated
View File

@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "6008577001548e6e63c074be98000d97", "content-hash": "8aafa9016bed300d87195bccee6bfe4b",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
"version": "0.12.3", "version": "0.12.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/brick/math.git", "url": "https://github.com/brick/math.git",
"reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" "reference": "f510c0a40911935b77b86859eb5223d58d660df1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1",
"reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", "reference": "f510c0a40911935b77b86859eb5223d58d660df1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -26,7 +26,7 @@
"require-dev": { "require-dev": {
"php-coveralls/php-coveralls": "^2.2", "php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^10.1", "phpunit/phpunit": "^10.1",
"vimeo/psalm": "6.8.8" "vimeo/psalm": "5.16.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -56,7 +56,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/brick/math/issues", "issues": "https://github.com/brick/math/issues",
"source": "https://github.com/brick/math/tree/0.12.3" "source": "https://github.com/brick/math/tree/0.12.1"
}, },
"funding": [ "funding": [
{ {
@@ -64,7 +64,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-02-28T13:11:00+00:00" "time": "2023-11-29T23:19:16+00:00"
}, },
{ {
"name": "carbonphp/carbon-doctrine-types", "name": "carbonphp/carbon-doctrine-types",
@@ -1283,21 +1283,21 @@
}, },
{ {
"name": "inertiajs/inertia-laravel", "name": "inertiajs/inertia-laravel",
"version": "v2.0.1", "version": "v2.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/inertiajs/inertia-laravel.git", "url": "https://github.com/inertiajs/inertia-laravel.git",
"reference": "d855ad18bcaae883e307619370d8c3dcfb5adbaa" "reference": "0259e37f802bc39c814c42ba92c04ada17921f70"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/d855ad18bcaae883e307619370d8c3dcfb5adbaa", "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/0259e37f802bc39c814c42ba92c04ada17921f70",
"reference": "d855ad18bcaae883e307619370d8c3dcfb5adbaa", "reference": "0259e37f802bc39c814c42ba92c04ada17921f70",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-json": "*", "ext-json": "*",
"laravel/framework": "^10.0|^11.0|^12.0", "laravel/framework": "^10.0|^11.0",
"php": "^8.1.0", "php": "^8.1.0",
"symfony/console": "^6.2|^7.0" "symfony/console": "^6.2|^7.0"
}, },
@@ -1345,7 +1345,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/inertiajs/inertia-laravel/issues", "issues": "https://github.com/inertiajs/inertia-laravel/issues",
"source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.1" "source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -1353,20 +1353,20 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-02-18T19:00:36+00:00" "time": "2024-12-13T02:48:29+00:00"
}, },
{ {
"name": "laravel/dusk", "name": "laravel/dusk",
"version": "v8.3.1", "version": "v8.2.14",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/dusk.git", "url": "https://github.com/laravel/dusk.git",
"reference": "541ca2d2004ae4ed04446b9e712b68180fca158c" "reference": "28c9fce3900625522afc2468a9117cdf44f919c1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/dusk/zipball/541ca2d2004ae4ed04446b9e712b68180fca158c", "url": "https://api.github.com/repos/laravel/dusk/zipball/28c9fce3900625522afc2468a9117cdf44f919c1",
"reference": "541ca2d2004ae4ed04446b9e712b68180fca158c", "reference": "28c9fce3900625522afc2468a9117cdf44f919c1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1383,13 +1383,11 @@
"vlucas/phpdotenv": "^5.2" "vlucas/phpdotenv": "^5.2"
}, },
"require-dev": { "require-dev": {
"laravel/framework": "^10.0|^11.0|^12.0",
"mockery/mockery": "^1.6", "mockery/mockery": "^1.6",
"orchestra/testbench-core": "^8.19|^9.0|^10.0", "orchestra/testbench": "^8.19|^9.0|^10.0",
"phpstan/phpstan": "^1.10", "phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^10.1|^11.0|^12.0.1", "phpunit/phpunit": "^10.1|^11.0",
"psy/psysh": "^0.11.12|^0.12", "psy/psysh": "^0.11.12|^0.12"
"symfony/yaml": "^6.2|^7.0"
}, },
"suggest": { "suggest": {
"ext-pcntl": "Used to gracefully terminate Dusk when tests are running." "ext-pcntl": "Used to gracefully terminate Dusk when tests are running."
@@ -1425,26 +1423,26 @@
], ],
"support": { "support": {
"issues": "https://github.com/laravel/dusk/issues", "issues": "https://github.com/laravel/dusk/issues",
"source": "https://github.com/laravel/dusk/tree/v8.3.1" "source": "https://github.com/laravel/dusk/tree/v8.2.14"
}, },
"time": "2025-02-12T16:14:51+00:00" "time": "2025-01-26T19:36:00+00:00"
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v12.0.1", "version": "v11.41.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "d99e2385a6d4324782d52f4423891966425641be" "reference": "3ef433d5865f30a19b6b1be247586068399b59cc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/d99e2385a6d4324782d52f4423891966425641be", "url": "https://api.github.com/repos/laravel/framework/zipball/3ef433d5865f30a19b6b1be247586068399b59cc",
"reference": "d99e2385a6d4324782d52f4423891966425641be", "reference": "3ef433d5865f30a19b6b1be247586068399b59cc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"brick/math": "^0.11|^0.12", "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12",
"composer-runtime-api": "^2.2", "composer-runtime-api": "^2.2",
"doctrine/inflector": "^2.0.5", "doctrine/inflector": "^2.0.5",
"dragonmantank/cron-expression": "^3.4", "dragonmantank/cron-expression": "^3.4",
@@ -1459,32 +1457,32 @@
"fruitcake/php-cors": "^1.3", "fruitcake/php-cors": "^1.3",
"guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/guzzle": "^7.8.2",
"guzzlehttp/uri-template": "^1.0", "guzzlehttp/uri-template": "^1.0",
"laravel/prompts": "^0.3.0", "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0",
"laravel/serializable-closure": "^1.3|^2.0", "laravel/serializable-closure": "^1.3|^2.0",
"league/commonmark": "^2.6", "league/commonmark": "^2.6",
"league/flysystem": "^3.25.1", "league/flysystem": "^3.25.1",
"league/flysystem-local": "^3.25.1", "league/flysystem-local": "^3.25.1",
"league/uri": "^7.5.1", "league/uri": "^7.5.1",
"monolog/monolog": "^3.0", "monolog/monolog": "^3.0",
"nesbot/carbon": "^3.8.4", "nesbot/carbon": "^2.72.6|^3.8.4",
"nunomaduro/termwind": "^2.0", "nunomaduro/termwind": "^2.0",
"php": "^8.2", "php": "^8.2",
"psr/container": "^1.1.1|^2.0.1", "psr/container": "^1.1.1|^2.0.1",
"psr/log": "^1.0|^2.0|^3.0", "psr/log": "^1.0|^2.0|^3.0",
"psr/simple-cache": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0",
"ramsey/uuid": "^4.7", "ramsey/uuid": "^4.7",
"symfony/console": "^7.2.0", "symfony/console": "^7.0.3",
"symfony/error-handler": "^7.2.0", "symfony/error-handler": "^7.0.3",
"symfony/finder": "^7.2.0", "symfony/finder": "^7.0.3",
"symfony/http-foundation": "^7.2.0", "symfony/http-foundation": "^7.2.0",
"symfony/http-kernel": "^7.2.0", "symfony/http-kernel": "^7.0.3",
"symfony/mailer": "^7.2.0", "symfony/mailer": "^7.0.3",
"symfony/mime": "^7.2.0", "symfony/mime": "^7.0.3",
"symfony/polyfill-php83": "^1.31", "symfony/polyfill-php83": "^1.31",
"symfony/process": "^7.2.0", "symfony/process": "^7.0.3",
"symfony/routing": "^7.2.0", "symfony/routing": "^7.0.3",
"symfony/uid": "^7.2.0", "symfony/uid": "^7.0.3",
"symfony/var-dumper": "^7.2.0", "symfony/var-dumper": "^7.0.3",
"tijsverkoyen/css-to-inline-styles": "^2.2.5", "tijsverkoyen/css-to-inline-styles": "^2.2.5",
"vlucas/phpdotenv": "^5.6.1", "vlucas/phpdotenv": "^5.6.1",
"voku/portable-ascii": "^2.0.2" "voku/portable-ascii": "^2.0.2"
@@ -1548,17 +1546,17 @@
"league/flysystem-read-only": "^3.25.1", "league/flysystem-read-only": "^3.25.1",
"league/flysystem-sftp-v3": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1",
"mockery/mockery": "^1.6.10", "mockery/mockery": "^1.6.10",
"orchestra/testbench-core": "^10.0", "orchestra/testbench-core": "^9.6",
"pda/pheanstalk": "^5.0.6", "pda/pheanstalk": "^5.0.6",
"php-http/discovery": "^1.15", "php-http/discovery": "^1.15",
"phpstan/phpstan": "^2.0", "phpstan/phpstan": "^1.11.5",
"phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", "phpunit/phpunit": "^10.5.35|^11.3.6",
"predis/predis": "^2.3", "predis/predis": "^2.3",
"resend/resend-php": "^0.10.0", "resend/resend-php": "^0.10.0",
"symfony/cache": "^7.2.0", "symfony/cache": "^7.0.3",
"symfony/http-client": "^7.2.0", "symfony/http-client": "^7.0.3",
"symfony/psr-http-message-bridge": "^7.2.0", "symfony/psr-http-message-bridge": "^7.0.3",
"symfony/translation": "^7.2.0" "symfony/translation": "^7.0.3"
}, },
"suggest": { "suggest": {
"ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
@@ -1584,22 +1582,22 @@
"mockery/mockery": "Required to use mocking (^1.6).", "mockery/mockery": "Required to use mocking (^1.6).",
"pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).",
"php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).",
"phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).",
"predis/predis": "Required to use the predis connector (^2.3).", "predis/predis": "Required to use the predis connector (^2.3).",
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
"resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).",
"symfony/cache": "Required to PSR-6 cache bridge (^7.2).", "symfony/cache": "Required to PSR-6 cache bridge (^7.0).",
"symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).",
"symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).",
"symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).",
"symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).",
"symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)."
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "12.x-dev" "dev-master": "11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -1642,20 +1640,20 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2025-02-24T13:31:23+00:00" "time": "2025-01-30T13:25:22+00:00"
}, },
{ {
"name": "laravel/prompts", "name": "laravel/prompts",
"version": "v0.3.5", "version": "v0.3.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/prompts.git", "url": "https://github.com/laravel/prompts.git",
"reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" "reference": "abeaa2ba4294247d5409490d1ca1bc6248087011"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", "url": "https://api.github.com/repos/laravel/prompts/zipball/abeaa2ba4294247d5409490d1ca1bc6248087011",
"reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", "reference": "abeaa2ba4294247d5409490d1ca1bc6248087011",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1699,9 +1697,9 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.", "description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": { "support": {
"issues": "https://github.com/laravel/prompts/issues", "issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.3.5" "source": "https://github.com/laravel/prompts/tree/v0.3.4"
}, },
"time": "2025-02-11T13:34:40+00:00" "time": "2025-01-24T15:41:01+00:00"
}, },
{ {
"name": "laravel/reverb", "name": "laravel/reverb",
@@ -1851,16 +1849,16 @@
}, },
{ {
"name": "laravel/serializable-closure", "name": "laravel/serializable-closure",
"version": "v2.0.3", "version": "v2.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/serializable-closure.git", "url": "https://github.com/laravel/serializable-closure.git",
"reference": "f379c13663245f7aa4512a7869f62eb14095f23f" "reference": "2e1a362527783bcab6c316aad51bf36c5513ae44"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f379c13663245f7aa4512a7869f62eb14095f23f", "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/2e1a362527783bcab6c316aad51bf36c5513ae44",
"reference": "f379c13663245f7aa4512a7869f62eb14095f23f", "reference": "2e1a362527783bcab6c316aad51bf36c5513ae44",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1908,7 +1906,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues", "issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure" "source": "https://github.com/laravel/serializable-closure"
}, },
"time": "2025-02-11T15:03:05+00:00" "time": "2025-01-24T15:42:37+00:00"
}, },
{ {
"name": "laravel/telescope", "name": "laravel/telescope",
@@ -2701,16 +2699,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "3.8.6", "version": "3.8.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/CarbonPHP/carbon.git", "url": "https://github.com/CarbonPHP/carbon.git",
"reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd" "reference": "129700ed449b1f02d70272d2ac802357c8c30c58"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ff2f20cf83bd4d503720632ce8a426dc747bf7fd", "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/129700ed449b1f02d70272d2ac802357c8c30c58",
"reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd", "reference": "129700ed449b1f02d70272d2ac802357c8c30c58",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2786,8 +2784,8 @@
], ],
"support": { "support": {
"docs": "https://carbon.nesbot.com/docs", "docs": "https://carbon.nesbot.com/docs",
"issues": "https://github.com/CarbonPHP/carbon/issues", "issues": "https://github.com/briannesbitt/Carbon/issues",
"source": "https://github.com/CarbonPHP/carbon" "source": "https://github.com/briannesbitt/Carbon"
}, },
"funding": [ "funding": [
{ {
@@ -2803,7 +2801,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-20T17:33:38+00:00" "time": "2024-12-27T09:25:35+00:00"
}, },
{ {
"name": "nette/schema", "name": "nette/schema",
@@ -3928,16 +3926,16 @@
}, },
{ {
"name": "ramsey/collection", "name": "ramsey/collection",
"version": "2.1.0", "version": "2.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/ramsey/collection.git", "url": "https://github.com/ramsey/collection.git",
"reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109" "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
"reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3945,22 +3943,25 @@
}, },
"require-dev": { "require-dev": {
"captainhook/plugin-composer": "^5.3", "captainhook/plugin-composer": "^5.3",
"ergebnis/composer-normalize": "^2.45", "ergebnis/composer-normalize": "^2.28.3",
"fakerphp/faker": "^1.24", "fakerphp/faker": "^1.21",
"hamcrest/hamcrest-php": "^2.0", "hamcrest/hamcrest-php": "^2.0",
"jangregor/phpstan-prophecy": "^2.1", "jangregor/phpstan-prophecy": "^1.0",
"mockery/mockery": "^1.6", "mockery/mockery": "^1.5",
"php-parallel-lint/php-console-highlighter": "^1.0", "php-parallel-lint/php-console-highlighter": "^1.0",
"php-parallel-lint/php-parallel-lint": "^1.4", "php-parallel-lint/php-parallel-lint": "^1.3",
"phpspec/prophecy-phpunit": "^2.3", "phpcsstandards/phpcsutils": "^1.0.0-rc1",
"phpstan/extension-installer": "^1.4", "phpspec/prophecy-phpunit": "^2.0",
"phpstan/phpstan": "^2.1", "phpstan/extension-installer": "^1.2",
"phpstan/phpstan-mockery": "^2.0", "phpstan/phpstan": "^1.9",
"phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-mockery": "^1.1",
"phpunit/phpunit": "^10.5", "phpstan/phpstan-phpunit": "^1.3",
"ramsey/coding-standard": "^2.3", "phpunit/phpunit": "^9.5",
"ramsey/conventional-commits": "^1.6", "psalm/plugin-mockery": "^1.1",
"roave/security-advisories": "dev-latest" "psalm/plugin-phpunit": "^0.18.4",
"ramsey/coding-standard": "^2.0.3",
"ramsey/conventional-commits": "^1.3",
"vimeo/psalm": "^5.4"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -3998,9 +3999,19 @@
], ],
"support": { "support": {
"issues": "https://github.com/ramsey/collection/issues", "issues": "https://github.com/ramsey/collection/issues",
"source": "https://github.com/ramsey/collection/tree/2.1.0" "source": "https://github.com/ramsey/collection/tree/2.0.0"
}, },
"time": "2025-03-02T04:48:29+00:00" "funding": [
{
"url": "https://github.com/ramsey",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
"type": "tidelift"
}
],
"time": "2022-12-31T21:50:55+00:00"
}, },
{ {
"name": "ramsey/uuid", "name": "ramsey/uuid",
@@ -4982,16 +4993,16 @@
}, },
{ {
"name": "symfony/error-handler", "name": "symfony/error-handler",
"version": "v7.2.4", "version": "v7.2.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/error-handler.git", "url": "https://github.com/symfony/error-handler.git",
"reference": "aabf79938aa795350c07ce6464dd1985607d95d5" "reference": "959a74d044a6db21f4caa6d695648dcb5584cb49"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/aabf79938aa795350c07ce6464dd1985607d95d5", "url": "https://api.github.com/repos/symfony/error-handler/zipball/959a74d044a6db21f4caa6d695648dcb5584cb49",
"reference": "aabf79938aa795350c07ce6464dd1985607d95d5", "reference": "959a74d044a6db21f4caa6d695648dcb5584cb49",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -5037,7 +5048,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code", "description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/error-handler/tree/v7.2.4" "source": "https://github.com/symfony/error-handler/tree/v7.2.3"
}, },
"funding": [ "funding": [
{ {
@@ -5053,7 +5064,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-02T20:27:07+00:00" "time": "2025-01-07T09:39:55+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
@@ -5355,16 +5366,16 @@
}, },
{ {
"name": "symfony/http-kernel", "name": "symfony/http-kernel",
"version": "v7.2.4", "version": "v7.2.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-kernel.git", "url": "https://github.com/symfony/http-kernel.git",
"reference": "9f1103734c5789798fefb90e91de4586039003ed" "reference": "caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f1103734c5789798fefb90e91de4586039003ed", "url": "https://api.github.com/repos/symfony/http-kernel/zipball/caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b",
"reference": "9f1103734c5789798fefb90e91de4586039003ed", "reference": "caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -5449,7 +5460,7 @@
"description": "Provides a structured process for converting a Request into a Response", "description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/http-kernel/tree/v7.2.4" "source": "https://github.com/symfony/http-kernel/tree/v7.2.3"
}, },
"funding": [ "funding": [
{ {
@@ -5465,7 +5476,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-26T11:01:22+00:00" "time": "2025-01-29T07:40:13+00:00"
}, },
{ {
"name": "symfony/mailer", "name": "symfony/mailer",
@@ -5549,16 +5560,16 @@
}, },
{ {
"name": "symfony/mime", "name": "symfony/mime",
"version": "v7.2.4", "version": "v7.2.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/mime.git", "url": "https://github.com/symfony/mime.git",
"reference": "87ca22046b78c3feaff04b337f33b38510fd686b" "reference": "2fc3b4bd67e4747e45195bc4c98bea4628476204"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b", "url": "https://api.github.com/repos/symfony/mime/zipball/2fc3b4bd67e4747e45195bc4c98bea4628476204",
"reference": "87ca22046b78c3feaff04b337f33b38510fd686b", "reference": "2fc3b4bd67e4747e45195bc4c98bea4628476204",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -5613,7 +5624,7 @@
"mime-type" "mime-type"
], ],
"support": { "support": {
"source": "https://github.com/symfony/mime/tree/v7.2.4" "source": "https://github.com/symfony/mime/tree/v7.2.3"
}, },
"funding": [ "funding": [
{ {
@@ -5629,7 +5640,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-19T08:51:20+00:00" "time": "2025-01-27T11:08:17+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
@@ -6269,16 +6280,16 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v7.2.4", "version": "v7.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf" "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
"reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -6310,7 +6321,7 @@
"description": "Executes commands in sub-processes", "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/process/tree/v7.2.4" "source": "https://github.com/symfony/process/tree/v7.2.0"
}, },
"funding": [ "funding": [
{ {
@@ -6326,7 +6337,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-05T08:33:46+00:00" "time": "2024-11-06T14:24:19+00:00"
}, },
{ {
"name": "symfony/routing", "name": "symfony/routing",
@@ -6581,16 +6592,16 @@
}, },
{ {
"name": "symfony/translation", "name": "symfony/translation",
"version": "v7.2.4", "version": "v7.2.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation.git", "url": "https://github.com/symfony/translation.git",
"reference": "283856e6981286cc0d800b53bd5703e8e363f05a" "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", "url": "https://api.github.com/repos/symfony/translation/zipball/e2674a30132b7cc4d74540d6c2573aa363f05923",
"reference": "283856e6981286cc0d800b53bd5703e8e363f05a", "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -6656,7 +6667,7 @@
"description": "Provides tools to internationalize your application", "description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/translation/tree/v7.2.4" "source": "https://github.com/symfony/translation/tree/v7.2.2"
}, },
"funding": [ "funding": [
{ {
@@ -6672,7 +6683,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-13T10:27:23+00:00" "time": "2024-12-07T08:18:10+00:00"
}, },
{ {
"name": "symfony/translation-contracts", "name": "symfony/translation-contracts",
@@ -6911,16 +6922,16 @@
}, },
{ {
"name": "tightenco/ziggy", "name": "tightenco/ziggy",
"version": "v2.5.2", "version": "v2.5.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/tighten/ziggy.git", "url": "https://github.com/tighten/ziggy.git",
"reference": "d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c" "reference": "2b574ba281546884b7bdde6eefa451ba7e0b52f7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/tighten/ziggy/zipball/d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c", "url": "https://api.github.com/repos/tighten/ziggy/zipball/2b574ba281546884b7bdde6eefa451ba7e0b52f7",
"reference": "d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c", "reference": "2b574ba281546884b7bdde6eefa451ba7e0b52f7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -6930,9 +6941,9 @@
}, },
"require-dev": { "require-dev": {
"laravel/folio": "^1.1", "laravel/folio": "^1.1",
"orchestra/testbench": "^7.0 || ^8.0 || ^9.0 || ^10.0", "orchestra/testbench": "^7.0 || ^8.0 || ^9.0",
"pestphp/pest": "^2.26|^3.0", "pestphp/pest": "^2.26",
"pestphp/pest-plugin-laravel": "^2.4|^3.0" "pestphp/pest-plugin-laravel": "^2.4"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -6975,9 +6986,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/tighten/ziggy/issues", "issues": "https://github.com/tighten/ziggy/issues",
"source": "https://github.com/tighten/ziggy/tree/v2.5.2" "source": "https://github.com/tighten/ziggy/tree/v2.5.0"
}, },
"time": "2025-02-27T15:43:52+00:00" "time": "2025-01-23T00:32:18+00:00"
}, },
{ {
"name": "tijsverkoyen/css-to-inline-styles", "name": "tijsverkoyen/css-to-inline-styles",
@@ -7439,29 +7450,29 @@
}, },
{ {
"name": "laravel/breeze", "name": "laravel/breeze",
"version": "v2.3.5", "version": "v2.3.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/breeze.git", "url": "https://github.com/laravel/breeze.git",
"reference": "1d85805c4aecc425a0ce157147384d4becea3fa2" "reference": "c40f7fce4fd80e39c7f4317697eeba21d2344003"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/breeze/zipball/1d85805c4aecc425a0ce157147384d4becea3fa2", "url": "https://api.github.com/repos/laravel/breeze/zipball/c40f7fce4fd80e39c7f4317697eeba21d2344003",
"reference": "1d85805c4aecc425a0ce157147384d4becea3fa2", "reference": "c40f7fce4fd80e39c7f4317697eeba21d2344003",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"illuminate/console": "^11.0|^12.0", "illuminate/console": "^11.0",
"illuminate/filesystem": "^11.0|^12.0", "illuminate/filesystem": "^11.0",
"illuminate/support": "^11.0|^12.0", "illuminate/support": "^11.0",
"illuminate/validation": "^11.0|^12.0", "illuminate/validation": "^11.0",
"php": "^8.2.0", "php": "^8.2.0",
"symfony/console": "^7.0" "symfony/console": "^7.0"
}, },
"require-dev": { "require-dev": {
"laravel/framework": "^11.0|^12.0", "laravel/framework": "^11.0",
"orchestra/testbench-core": "^9.0|^10.0", "orchestra/testbench-core": "^9.0",
"phpstan/phpstan": "^2.0" "phpstan/phpstan": "^2.0"
}, },
"type": "library", "type": "library",
@@ -7496,7 +7507,7 @@
"issues": "https://github.com/laravel/breeze/issues", "issues": "https://github.com/laravel/breeze/issues",
"source": "https://github.com/laravel/breeze" "source": "https://github.com/laravel/breeze"
}, },
"time": "2025-02-19T23:49:42+00:00" "time": "2025-01-26T19:08:50+00:00"
}, },
{ {
"name": "laravel/pail", "name": "laravel/pail",
@@ -7578,16 +7589,16 @@
}, },
{ {
"name": "laravel/pint", "name": "laravel/pint",
"version": "v1.21.0", "version": "v1.20.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/pint.git", "url": "https://github.com/laravel/pint.git",
"reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425" "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/pint/zipball/531fa0871fbde719c51b12afa3a443b8f4e4b425", "url": "https://api.github.com/repos/laravel/pint/zipball/53072e8ea22213a7ed168a8a15b96fbb8b82d44b",
"reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425", "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -7595,15 +7606,15 @@
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-tokenizer": "*", "ext-tokenizer": "*",
"ext-xml": "*", "ext-xml": "*",
"php": "^8.2.0" "php": "^8.1.0"
}, },
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "^3.68.5", "friendsofphp/php-cs-fixer": "^3.66.0",
"illuminate/view": "^11.42.0", "illuminate/view": "^10.48.25",
"larastan/larastan": "^3.0.4", "larastan/larastan": "^2.9.12",
"laravel-zero/framework": "^11.36.1", "laravel-zero/framework": "^10.48.25",
"mockery/mockery": "^1.6.12", "mockery/mockery": "^1.6.12",
"nunomaduro/termwind": "^2.3", "nunomaduro/termwind": "^1.17.0",
"pestphp/pest": "^2.36.0" "pestphp/pest": "^2.36.0"
}, },
"bin": [ "bin": [
@@ -7640,7 +7651,7 @@
"issues": "https://github.com/laravel/pint/issues", "issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint" "source": "https://github.com/laravel/pint"
}, },
"time": "2025-02-18T03:18:57+00:00" "time": "2025-01-14T16:20:53+00:00"
}, },
{ {
"name": "laravel/sail", "name": "laravel/sail",
@@ -7790,16 +7801,16 @@
}, },
{ {
"name": "myclabs/deep-copy", "name": "myclabs/deep-copy",
"version": "1.13.0", "version": "1.12.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/myclabs/DeepCopy.git", "url": "https://github.com/myclabs/DeepCopy.git",
"reference": "024473a478be9df5fdaca2c793f2232fe788e414" "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845",
"reference": "024473a478be9df5fdaca2c793f2232fe788e414", "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -7838,7 +7849,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/myclabs/DeepCopy/issues", "issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1"
}, },
"funding": [ "funding": [
{ {
@@ -7846,7 +7857,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-12T12:17:51+00:00" "time": "2024-11-08T17:47:46+00:00"
}, },
{ {
"name": "nunomaduro/collision", "name": "nunomaduro/collision",
@@ -8066,23 +8077,23 @@
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
"version": "11.0.9", "version": "11.0.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" "reference": "418c59fd080954f8c4aa5631d9502ecda2387118"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118",
"reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", "reference": "418c59fd080954f8c4aa5631d9502ecda2387118",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-dom": "*", "ext-dom": "*",
"ext-libxml": "*", "ext-libxml": "*",
"ext-xmlwriter": "*", "ext-xmlwriter": "*",
"nikic/php-parser": "^5.4.0", "nikic/php-parser": "^5.3.1",
"php": ">=8.2", "php": ">=8.2",
"phpunit/php-file-iterator": "^5.1.0", "phpunit/php-file-iterator": "^5.1.0",
"phpunit/php-text-template": "^4.0.1", "phpunit/php-text-template": "^4.0.1",
@@ -8094,7 +8105,7 @@
"theseer/tokenizer": "^1.2.3" "theseer/tokenizer": "^1.2.3"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^11.5.2" "phpunit/phpunit": "^11.5.0"
}, },
"suggest": { "suggest": {
"ext-pcov": "PHP extension that provides line coverage", "ext-pcov": "PHP extension that provides line coverage",
@@ -8132,7 +8143,7 @@
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8"
}, },
"funding": [ "funding": [
{ {
@@ -8140,7 +8151,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-02-25T13:26:39+00:00" "time": "2024-12-11T12:34:27+00:00"
}, },
{ {
"name": "phpunit/php-file-iterator", "name": "phpunit/php-file-iterator",
@@ -8389,16 +8400,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "11.5.10", "version": "11.5.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "d5df2b32d729562ff8db634678d71085ee579006" "reference": "e0da3559ec50a91f6a6a201473b607b5ccfd9a1b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d5df2b32d729562ff8db634678d71085ee579006", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e0da3559ec50a91f6a6a201473b607b5ccfd9a1b",
"reference": "d5df2b32d729562ff8db634678d71085ee579006", "reference": "e0da3559ec50a91f6a6a201473b607b5ccfd9a1b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -8408,7 +8419,7 @@
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-xml": "*", "ext-xml": "*",
"ext-xmlwriter": "*", "ext-xmlwriter": "*",
"myclabs/deep-copy": "^1.13.0", "myclabs/deep-copy": "^1.12.1",
"phar-io/manifest": "^2.0.4", "phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1", "phar-io/version": "^3.2.1",
"php": ">=8.2", "php": ">=8.2",
@@ -8470,7 +8481,7 @@
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues", "issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy", "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.10" "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.4"
}, },
"funding": [ "funding": [
{ {
@@ -8486,7 +8497,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-25T06:11:48+00:00" "time": "2025-01-28T15:03:46+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",

View File

@@ -4,7 +4,5 @@ return [
"driver" => [ "driver" => [
"url" => $_ENV['DUSK_DRIVER_URL'] ?? env('DUSK_DRIVER_URL') ?? null "url" => $_ENV['DUSK_DRIVER_URL'] ?? env('DUSK_DRIVER_URL') ?? null
], ]
"shouldStartMaximized" => $_ENV['DUSK_START_MAXIMIZED'] ?? env('DUSK_START_MAXIMIZED') ?? false,
"headlessDisabled" => $_ENV['DUSK_HEADLESS_DISABLED'] ?? env('DUSK_HEADLESS_DISABLED') ?? false
]; ];

View File

@@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
$jobId = 3;
\App\Models\Job::forcecreate([
'id' => $jobId,
'name' => 'Jeu gratuit Epic Games',
'description' => 'Prends le jeu gratuit Epic games. Tourne tous les jours.',
]);
\App\Models\JobInfo::forceCreate([
"key" => "epicgames_account_email",
"name" => "E-mail",
"description" => "L'adresse e-mail utilisée pour votre compte Epic Games.",
"job_info_type_id" => 2,
"job_id" => $jobId,
], );
\App\Models\JobInfo::forceCreate([
"key" => "epicgames_account_password",
"name" => "Mot de passe",
"description" => "Le mot de passe utilisé pour votre compte Epic Games.",
"job_info_type_id" => 3,
"job_id" => $jobId,
]);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
\App\Models\Job::find(3)->delete();
\App\Models\JobInfo::where('job_id', 3)->delete();
}
};

View File

@@ -1,5 +1,6 @@
<?php <?php
use App\Browser\Jobs\EpicGames\EpicGamesJob;
use App\Browser\Jobs\Hellcase\HellcaseJob; use App\Browser\Jobs\Hellcase\HellcaseJob;
use App\Jobs\PruneOldJobRuns; use App\Jobs\PruneOldJobRuns;
use App\Services\BrowserJobsInstances; use App\Services\BrowserJobsInstances;
@@ -21,3 +22,6 @@ Schedule::job(new PruneOldJobRuns)->monthly()->onOneServer()->withoutOverlapping
// Jobs // Jobs
Schedule::job(new HellcaseJob)->daily()->onOneServer()->withoutOverlapping()->name('hellcase')->description('Hellcase job'); Schedule::job(new HellcaseJob)->daily()->onOneServer()->withoutOverlapping()->name('hellcase')->description('Hellcase job');
// Schedule::job(new HellcaseJob)->everyMinute()->onOneServer()->withoutOverlapping()->name('hellcase')->description('Hellcase job'); // Schedule::job(new HellcaseJob)->everyMinute()->onOneServer()->withoutOverlapping()->name('hellcase')->description('Hellcase job');
Schedule::job(new EpicGamesJob())->daily()->onOneServer()->withoutOverlapping()->name('epic-games')->description('Epic Games job');