diff --git a/app/Actions/License/CheckResaleLicense.php b/app/Actions/License/CheckResaleLicense.php
new file mode 100644
index 000000000..cef4e62ee
--- /dev/null
+++ b/app/Actions/License/CheckResaleLicense.php
@@ -0,0 +1,59 @@
+resale_license) {
+ return;
+ }
+ ray('Checking license key');
+ $data = Http::withHeaders([
+ 'Accept' => 'application/json',
+ ])->post('https://api.lemonsqueezy.com/v1/licenses/validate', [
+ 'license_key' => $settings->resale_license,
+ 'instance_name' => $instance_id,
+ ])->throw()->json();
+ $product_id = (int)data_get($data, 'meta.product_id');
+ $valid_product_id = (int)config('coolify.lemon_squeezy_product_id');
+ if ($product_id !== $valid_product_id) {
+ throw new \Exception('Invalid product id');
+ }
+ ray('Valid Product Id');
+
+ ['valid' => $valid, 'license_key' => $license_key] = $data;
+
+ if ($valid) {
+ if (data_get($license_key, 'status') === 'inactive') {
+ Http::withHeaders([
+ 'Accept' => 'application/json',
+ ])->post('https://api.lemonsqueezy.com/v1/licenses/activate', [
+ 'license_key' => $settings->resale_license,
+ 'instance_name' => $instance_id,
+ ])->throw()->json();
+ }
+ $settings->update([
+ 'is_resale_license_active' => true,
+ ]);
+ return;
+ }
+ throw new \Exception('Invalid license key');
+ } catch (\Throwable $th) {
+ ray($th);
+ $settings->update([
+ 'resale_license' => null,
+ 'is_resale_license_active' => false,
+ ]);
+ throw $th;
+ }
+ }
+}
diff --git a/app/Actions/Proxy/InstallProxy.php b/app/Actions/Proxy/StartProxy.php
similarity index 97%
rename from app/Actions/Proxy/InstallProxy.php
rename to app/Actions/Proxy/StartProxy.php
index c967a4687..2050e2ca1 100644
--- a/app/Actions/Proxy/InstallProxy.php
+++ b/app/Actions/Proxy/StartProxy.php
@@ -8,10 +8,11 @@
use Spatie\Activitylog\Models\Activity;
use Illuminate\Support\Str;
-class InstallProxy
+class StartProxy
{
public function __invoke(Server $server): Activity
{
+ // TODO: check for other proxies
if (is_null(data_get($server, 'proxy.type'))) {
$server->proxy->type = ProxyTypes::TRAEFIK_V2->value;
$server->proxy->status = ProxyStatus::EXITED->value;
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 1d20b7606..4e52dbb81 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -2,9 +2,11 @@
namespace App\Console;
+use App\Jobs\CheckResaleLicenseJob;
use App\Jobs\InstanceAutoUpdateJob;
use App\Jobs\ProxyCheckJob;
use App\Jobs\DockerCleanupJob;
+use App\Jobs\CheckResaleLicenseKeys;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
@@ -14,12 +16,15 @@ protected function schedule(Schedule $schedule): void
{
if (isDev()) {
$schedule->command('horizon:snapshot')->everyMinute();
+ $schedule->job(new ProxyCheckJob)->everyFiveMinutes();
+ // $schedule->job(new CheckResaleLicenseJob)->hourly();
// $schedule->job(new DockerCleanupJob)->everyOddHour();
// $schedule->job(new InstanceAutoUpdateJob(true))->everyMinute();
} else {
$schedule->command('horizon:snapshot')->everyFiveMinutes();
- $schedule->job(new DockerCleanupJob)->everyTenMinutes();
+ $schedule->job(new CheckResaleLicenseJob)->hourly();
$schedule->job(new ProxyCheckJob)->everyFiveMinutes();
+ $schedule->job(new DockerCleanupJob)->everyTenMinutes();
$schedule->job(new InstanceAutoUpdateJob)->everyTenMinutes();
}
}
@@ -29,4 +34,4 @@ protected function commands(): void
require base_path('routes/console.php');
}
-}
\ No newline at end of file
+}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 673409ba6..c9620f4bd 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -17,9 +17,23 @@ class Controller extends BaseController
{
use AuthorizesRequests, ValidatesRequests;
+ public function subscription()
+ {
+ if (!isCloud()) {
+ abort(404);
+ }
+ return view('subscription', [
+ 'settings' => InstanceSettings::get()
+ ]);
+ }
public function license()
{
- return view('license');
+ if (!isCloud()) {
+ abort(404);
+ }
+ return view('settings.license', [
+ 'settings' => InstanceSettings::get()
+ ]);
}
public function dashboard()
{
@@ -62,13 +76,23 @@ public function emails()
public function team()
{
$invitations = [];
- if (auth()->user()->isAdmin()) {
+ if (auth()->user()->isAdminFromSession()) {
$invitations = TeamInvitation::whereTeamId(auth()->user()->currentTeam()->id)->get();
}
return view('team.show', [
'invitations' => $invitations,
]);
}
+ public function members()
+ {
+ $invitations = [];
+ if (auth()->user()->isAdminFromSession()) {
+ $invitations = TeamInvitation::whereTeamId(auth()->user()->currentTeam()->id)->get();
+ }
+ return view('team.members', [
+ 'invitations' => $invitations,
+ ]);
+ }
public function acceptInvitation()
{
try {
diff --git a/app/Http/Controllers/MagicController.php b/app/Http/Controllers/MagicController.php
index 66dcf5549..c4f77805a 100644
--- a/app/Http/Controllers/MagicController.php
+++ b/app/Http/Controllers/MagicController.php
@@ -13,7 +13,7 @@ class MagicController extends Controller
public function servers()
{
return response()->json([
- 'servers' => Server::validated()->get()
+ 'servers' => Server::isUsable()->get()
]);
}
public function destinations()
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 7beaad19e..06777812f 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -21,7 +21,7 @@ class Kernel extends HttpKernel
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
- // \App\Http\Middleware\LicenseValid::class,
+
];
/**
@@ -37,6 +37,8 @@ class Kernel extends HttpKernel
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
+ \App\Http\Middleware\SubscriptionValid::class,
+
],
'api' => [
diff --git a/app/Http/Livewire/CheckLicense.php b/app/Http/Livewire/CheckLicense.php
new file mode 100644
index 000000000..7e6f07e26
--- /dev/null
+++ b/app/Http/Livewire/CheckLicense.php
@@ -0,0 +1,42 @@
+ 'nullable',
+ 'settings.is_resale_license_active' => 'nullable',
+ ];
+ protected $validationAttributes = [
+ 'settings.resale_license' => 'License',
+ 'instance_id' => 'Instance Id (Do not change this)',
+ 'settings.is_resale_license_active' => 'Is License Active',
+ ];
+ public function mount()
+ {
+ $this->instance_id = config('app.id');
+ $this->settings = InstanceSettings::get();
+ }
+ public function submit()
+ {
+ $this->validate();
+ $this->settings->save();
+ if ($this->settings->resale_license) {
+ try {
+ resolve(CheckResaleLicense::class)();
+ $this->emit('reloadWindow');
+ } catch (\Throwable $th) {
+ session()->flash('error', 'Something went wrong. Please contact support.
Error: ' . $th->getMessage());
+ ray($th->getMessage());
+ return redirect()->to('/settings/license');
+ }
+ }
+ }
+}
diff --git a/app/Http/Livewire/Project/Application/Danger.php b/app/Http/Livewire/Project/Application/Danger.php
index 72873665e..4af90927e 100644
--- a/app/Http/Livewire/Project/Application/Danger.php
+++ b/app/Http/Livewire/Project/Application/Danger.php
@@ -4,14 +4,17 @@
use App\Models\Application;
use Livewire\Component;
+use Visus\Cuid2\Cuid2;
class Danger extends Component
{
public Application $application;
public array $parameters;
+ public string|null $modalId = null;
public function mount()
{
+ $this->modalId = new Cuid2(7);
$this->parameters = getRouteParameters();
}
public function delete()
diff --git a/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php b/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php
index 9b1b78a00..9b35de54f 100644
--- a/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php
+++ b/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php
@@ -29,6 +29,7 @@ public function mount()
}
public function submit()
{
+ ray('submitting');
$this->validate();
$this->emitUp('submit', [
'key' => $this->key,
@@ -36,6 +37,7 @@ public function submit()
'is_build_time' => $this->is_build_time,
'is_preview' => $this->is_preview,
]);
+ $this->clear();
}
public function clear()
{
diff --git a/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php b/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php
index 1dcd605cd..f1ac75917 100644
--- a/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php
+++ b/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php
@@ -5,11 +5,17 @@
use App\Models\Application;
use App\Models\EnvironmentVariable;
use Livewire\Component;
+use Visus\Cuid2\Cuid2;
class All extends Component
{
public Application $application;
+ public string|null $modalId = null;
protected $listeners = ['refreshEnvs', 'submit'];
+ public function mount()
+ {
+ $this->modalId = new Cuid2(7);
+ }
public function refreshEnvs()
{
$this->application->refresh();
@@ -17,6 +23,11 @@ public function refreshEnvs()
public function submit($data)
{
try {
+ $found = $this->application->environment_variables()->where('key', $data['key'])->first();
+ if ($found) {
+ $this->emit('error', 'Environment variable already exists.');
+ return;
+ }
EnvironmentVariable::create([
'key' => $data['key'],
'value' => $data['value'],
@@ -27,7 +38,6 @@ public function submit($data)
$this->application->refresh();
$this->emit('success', 'Environment variable added successfully.');
- $this->emit('clearAddEnv');
} catch (\Exception $e) {
return general_error_handler(err: $e, that: $this);
}
diff --git a/app/Http/Livewire/Project/Application/EnvironmentVariable/Show.php b/app/Http/Livewire/Project/Application/EnvironmentVariable/Show.php
index 61ecaf3de..c5260e77c 100644
--- a/app/Http/Livewire/Project/Application/EnvironmentVariable/Show.php
+++ b/app/Http/Livewire/Project/Application/EnvironmentVariable/Show.php
@@ -4,12 +4,13 @@
use App\Models\EnvironmentVariable as ModelsEnvironmentVariable;
use Livewire\Component;
+use Visus\Cuid2\Cuid2;
class Show extends Component
{
public $parameters;
public ModelsEnvironmentVariable $env;
-
+ public string|null $modalId = null;
protected $rules = [
'env.key' => 'required|string',
'env.value' => 'required|string',
@@ -22,6 +23,7 @@ class Show extends Component
];
public function mount()
{
+ $this->modalId = new Cuid2(7);
$this->parameters = getRouteParameters();
}
public function submit()
diff --git a/app/Http/Livewire/Project/Application/Status.php b/app/Http/Livewire/Project/Application/Status.php
deleted file mode 100644
index 107cce4ae..000000000
--- a/app/Http/Livewire/Project/Application/Status.php
+++ /dev/null
@@ -1,17 +0,0 @@
-application->refresh();
- $this->emit('applicationStatusChanged');
- }
-}
diff --git a/app/Http/Livewire/Project/Application/Storages/Show.php b/app/Http/Livewire/Project/Application/Storages/Show.php
index 41c3c1fb8..ef6042baf 100644
--- a/app/Http/Livewire/Project/Application/Storages/Show.php
+++ b/app/Http/Livewire/Project/Application/Storages/Show.php
@@ -3,10 +3,12 @@
namespace App\Http\Livewire\Project\Application\Storages;
use Livewire\Component;
+use Visus\Cuid2\Cuid2;
class Show extends Component
{
public $storage;
+ public string|null $modalId = null;
protected $rules = [
'storage.name' => 'required|string',
'storage.mount_path' => 'required|string',
@@ -17,6 +19,10 @@ class Show extends Component
'mount_path' => 'mount',
'host_path' => 'host',
];
+ public function mount()
+ {
+ $this->modalId = new Cuid2(7);
+ }
public function submit()
{
$this->validate();
diff --git a/app/Http/Livewire/Project/New/PublicGitRepository.php b/app/Http/Livewire/Project/New/PublicGitRepository.php
index 9e24ed56d..8fbaf62fb 100644
--- a/app/Http/Livewire/Project/New/PublicGitRepository.php
+++ b/app/Http/Livewire/Project/New/PublicGitRepository.php
@@ -8,7 +8,7 @@
use App\Models\Project;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
-use Illuminate\Support\Facades\Log;
+use Carbon\Carbon;
use Livewire\Component;
use Spatie\Url\Url;
@@ -26,9 +26,9 @@ class PublicGitRepository extends Component
public string $selected_branch = 'main';
public bool $is_static = false;
public string|null $publish_directory = null;
- public string $git_branch;
+ public string $git_branch = 'main';
public int $rate_limit_remaining = 0;
- public int $rate_limit_reset = 0;
+ public $rate_limit_reset = 0;
private GithubApp|GitlabApp $git_source;
private string $git_host;
@@ -67,6 +67,12 @@ public function instantSave()
}
$this->emit('success', 'Application settings updated!');
}
+ private function get_branch()
+ {
+ ['rate_limit_remaining' => $this->rate_limit_remaining, 'rate_limit_reset' => $this->rate_limit_reset] = git_api(source: $this->git_source, endpoint: "/repos/{$this->git_repository}/branches/{$this->git_branch}");
+ $this->rate_limit_reset = Carbon::parse((int)$this->rate_limit_reset)->format('Y-M-d H:i:s');
+ $this->branch_found = true;
+ }
public function load_branch()
{
$this->branch_found = false;
@@ -74,12 +80,18 @@ public function load_branch()
'repository_url' => 'required|url'
]);
$this->get_git_source();
-
try {
- ['data' => $data, 'rate_limit_remaining' => $this->rate_limit_remaining, 'rate_limit_reset' => $this->rate_limit_reset] = git_api(source: $this->git_source, endpoint: "/repos/{$this->git_repository}/branches/{$this->git_branch}");
- $this->branch_found = true;
- } catch (\Throwable $e) {
- return general_error_handler(err: $e, that: $this);
+ $this->get_branch();
+ } catch (\Exception $e) {
+ }
+
+ if (!$this->branch_found && $this->git_branch == 'main') {
+ try {
+ $this->git_branch = 'master';
+ $this->get_branch();
+ } catch (\Exception $e) {
+ return general_error_handler(err: $e, that: $this);
+ }
}
}
private function get_git_source()
diff --git a/app/Http/Livewire/Server/Form.php b/app/Http/Livewire/Server/Form.php
index fc98c05bf..eeb0df413 100644
--- a/app/Http/Livewire/Server/Form.php
+++ b/app/Http/Livewire/Server/Form.php
@@ -5,6 +5,7 @@
use App\Actions\Server\InstallDocker;
use App\Models\Server;
use Livewire\Component;
+use Visus\Cuid2\Cuid2;
class Form extends Component
{
@@ -13,6 +14,7 @@ class Form extends Component
public $dockerVersion;
public string|null $wildcard_domain = null;
public int $cleanup_after_percentage;
+ public string|null $modalId = null;
protected $rules = [
'server.name' => 'required|min:6',
@@ -35,6 +37,7 @@ class Form extends Component
];
public function mount()
{
+ $this->modalId = new Cuid2(7);
$this->wildcard_domain = $this->server->settings->wildcard_domain;
$this->cleanup_after_percentage = $this->server->settings->cleanup_after_percentage;
}
@@ -60,7 +63,7 @@ public function validateServer()
} else {
$this->server->settings->is_usable = true;
$this->server->settings->save();
- $this->emit('serverValidated');
+ $this->emit('proxyStatusUpdated');
}
} catch (\Exception $e) {
$this->server->settings->is_reachable = false;
@@ -98,4 +101,4 @@ public function submit()
$this->server->save();
$this->emit('success', 'Server updated successfully.');
}
-}
\ No newline at end of file
+}
diff --git a/app/Http/Livewire/Server/Proxy.php b/app/Http/Livewire/Server/Proxy.php
index 7049cd173..5d3c1ebba 100644
--- a/app/Http/Livewire/Server/Proxy.php
+++ b/app/Http/Livewire/Server/Proxy.php
@@ -3,7 +3,6 @@
namespace App\Http\Livewire\Server;
use App\Actions\Proxy\CheckProxySettingsInSync;
-use App\Actions\Proxy\InstallProxy;
use App\Enums\ProxyTypes;
use Illuminate\Support\Str;
use App\Models\Server;
@@ -17,37 +16,27 @@ class Proxy extends Component
public $proxy_settings = null;
public string|null $redirect_url = null;
- protected $listeners = ['serverValidated', 'saveConfiguration'];
+ protected $listeners = ['proxyStatusUpdated', 'saveConfiguration'];
public function mount()
{
$this->redirect_url = $this->server->proxy->redirect_url;
}
- public function serverValidated()
+ public function proxyStatusUpdated()
{
$this->server->refresh();
}
public function switchProxy()
{
- $this->server->proxy->type = null;
+ $this->server->proxy = null;
$this->server->save();
+ $this->emit('proxyStatusUpdated');
}
- public function installProxy()
- {
- if (
- $this->server->proxy->last_applied_settings &&
- $this->server->proxy->last_saved_settings !== $this->server->proxy->last_applied_settings
- ) {
- $this->saveConfiguration($this->server);
- }
- $activity = resolve(InstallProxy::class)($this->server);
- $this->emit('newMonitorActivity', $activity->id);
- }
-
public function setProxy(string $proxy_type)
{
$this->server->proxy->type = $proxy_type;
$this->server->proxy->status = 'exited';
$this->server->save();
+ $this->emit('proxyStatusUpdated');
}
public function stopProxy()
{
@@ -56,6 +45,7 @@ public function stopProxy()
], $this->server);
$this->server->proxy->status = 'exited';
$this->server->save();
+ $this->emit('proxyStatusUpdated');
}
public function saveConfiguration()
{
diff --git a/app/Http/Livewire/Server/Proxy/Deploy.php b/app/Http/Livewire/Server/Proxy/Deploy.php
index aa12886f2..c1ca4ab57 100644
--- a/app/Http/Livewire/Server/Proxy/Deploy.php
+++ b/app/Http/Livewire/Server/Proxy/Deploy.php
@@ -2,7 +2,7 @@
namespace App\Http\Livewire\Server\Proxy;
-use App\Actions\Proxy\InstallProxy;
+use App\Actions\Proxy\StartProxy;
use App\Models\Server;
use Livewire\Component;
use Str;
@@ -11,7 +11,7 @@ class Deploy extends Component
{
public Server $server;
public $proxy_settings = null;
- protected $listeners = ['proxyStatusUpdated', 'serverValidated' => 'proxyStatusUpdated'];
+ protected $listeners = ['proxyStatusUpdated'];
public function proxyStatusUpdated()
{
$this->server->refresh();
@@ -24,7 +24,7 @@ public function deploy()
) {
$this->saveConfiguration($this->server);
}
- $activity = resolve(InstallProxy::class)($this->server);
+ $activity = resolve(StartProxy::class)($this->server);
$this->emit('newMonitorActivity', $activity->id);
}
public function stop()
diff --git a/app/Http/Livewire/Server/Proxy/Status.php b/app/Http/Livewire/Server/Proxy/Status.php
index 8a7725f85..e4d18e4a2 100644
--- a/app/Http/Livewire/Server/Proxy/Status.php
+++ b/app/Http/Livewire/Server/Proxy/Status.php
@@ -9,7 +9,7 @@
class Status extends Component
{
public Server $server;
- protected $listeners = ['proxyStatusUpdated', 'serverValidated' => 'proxyStatusUpdated'];
+ protected $listeners = ['proxyStatusUpdated'];
public function proxyStatusUpdated()
{
$this->server->refresh();
@@ -17,7 +17,7 @@ public function proxyStatusUpdated()
public function proxyStatus()
{
try {
- dispatch(new ProxyContainerStatusJob(
+ dispatch_sync(new ProxyContainerStatusJob(
server: $this->server
));
$this->emit('proxyStatusUpdated');
diff --git a/app/Http/Livewire/Settings/Configuration.php b/app/Http/Livewire/Settings/Configuration.php
index 41eae45fd..98371d136 100644
--- a/app/Http/Livewire/Settings/Configuration.php
+++ b/app/Http/Livewire/Settings/Configuration.php
@@ -2,7 +2,7 @@
namespace App\Http\Livewire\Settings;
-use App\Jobs\ProxyCheckJob;
+use App\Jobs\ProxyStartJob;
use App\Models\InstanceSettings as ModelsInstanceSettings;
use App\Models\Server;
use Livewire\Component;
@@ -21,11 +21,13 @@ class Configuration extends Component
protected $rules = [
'settings.fqdn' => 'nullable',
+ 'settings.resale_license' => 'nullable',
'settings.public_port_min' => 'required',
'settings.public_port_max' => 'required',
];
protected $validationAttributes = [
'settings.fqdn' => 'FQDN',
+ 'settings.resale_license' => 'Resale License',
'settings.public_port_min' => 'Public port min',
'settings.public_port_max' => 'Public port max',
];
@@ -105,6 +107,7 @@ private function setup_instance_fqdn()
];
}
$this->save_configuration_to_disk($traefik_dynamic_conf, $file);
+ dispatch(new ProxyStartJob($this->server));
}
}
private function save_configuration_to_disk(array $traefik_dynamic_conf, string $file)
@@ -134,12 +137,8 @@ public function submit()
}
$this->validate();
$this->settings->save();
-
$this->server = Server::findOrFail(0);
$this->setup_instance_fqdn();
- if ($this->settings->fqdn) {
- dispatch(new ProxyCheckJob());
- }
$this->emit('success', 'Instance settings updated successfully!');
}
}
diff --git a/app/Http/Middleware/LicenseValid.php b/app/Http/Middleware/LicenseValid.php
deleted file mode 100644
index 099092ff9..000000000
--- a/app/Http/Middleware/LicenseValid.php
+++ /dev/null
@@ -1,30 +0,0 @@
-path());
- if ($request->path() !== 'license' && $request->path() !== 'livewire/message/license') {
- return redirect('license');
- }
- }
- }
- return $next($request);
- }
-}
diff --git a/app/Http/Middleware/SubscriptionValid.php b/app/Http/Middleware/SubscriptionValid.php
new file mode 100644
index 000000000..e7fcdff3c
--- /dev/null
+++ b/app/Http/Middleware/SubscriptionValid.php
@@ -0,0 +1,41 @@
+user()) {
+ if (isCloud() && !isSubscribed()) {
+ ray('SubscriptionValid Middleware');
+
+ $allowed_paths = [
+ 'subscription',
+ 'login',
+ 'register',
+ 'logout',
+ 'livewire/message/check-license',
+ 'livewire/message/switch-team',
+ ];
+ if (!in_array($request->path(), $allowed_paths)) {
+ return redirect('subscription');
+ } else {
+ return $next($request);
+ }
+ } else {
+ if ($request->path() === 'subscription' && !auth()->user()->isInstanceAdmin()) {
+ return redirect('/');
+ } else {
+ return $next($request);
+ }
+ }
+ }
+ return $next($request);
+ }
+}
diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php
index 36a08fa03..a800d7c2e 100644
--- a/app/Jobs/ApplicationDeploymentJob.php
+++ b/app/Jobs/ApplicationDeploymentJob.php
@@ -107,7 +107,7 @@ public function __construct(int $application_deployment_queue_id)
public function handle(): void
{
- ray()->measure();
+ // ray()->measure();
$this->application_deployment_queue->update([
'status' => ApplicationDeploymentStatus::IN_PROGRESS->value,
]);
@@ -117,6 +117,7 @@ public function handle(): void
} else {
$this->deploy();
}
+ if ($this->application->fqdn) dispatch(new ProxyStartJob($this->server));
$this->next(ApplicationDeploymentStatus::FINISHED->value);
} catch (\Exception $e) {
ray($e);
@@ -131,7 +132,7 @@ public function handle(): void
"hidden" => true,
]
);
- ray()->measure();
+ // ray()->measure();
}
}
public function failed(Throwable $exception): void
@@ -261,7 +262,7 @@ private function build_image()
location / {
root /usr/share/nginx/html;
index index.html;
- try_files \$uri \$uri/index.html \$uri/ /index.html =404;
+ try_files \$uri \$uri.html \$uri/index.html \$uri/ /index.html =404;
}
error_page 500 502 503 504 /50x.html;
diff --git a/app/Jobs/CheckResaleLicenseJob.php b/app/Jobs/CheckResaleLicenseJob.php
new file mode 100644
index 000000000..0e925c569
--- /dev/null
+++ b/app/Jobs/CheckResaleLicenseJob.php
@@ -0,0 +1,32 @@
+where('mount', $docker_root_filesystem)->first();
- if (Str::of(data_get($mount_point, 'use%'))->trim()->replace('%', '')->value() >= $server->settings->cleanup_after_percentage) {
+ $disk_percentage_before = $this->get_disk_usage($server, $docker_root_filesystem);
+ if ($disk_percentage_before >= $server->settings->cleanup_after_percentage) {
instant_remote_process(['docker image prune -af'], $server);
instant_remote_process(['docker container prune -f --filter "label=coolify.managed=true"'], $server);
instant_remote_process(['docker builder prune -af'], $server);
+ $disk_percentage_after = $this->get_disk_usage($server, $docker_root_filesystem);
+ if ($disk_percentage_after < $disk_percentage_before) {
+ ray('Saved ' . ($disk_percentage_before - $disk_percentage_after) . '% disk space on ' . $server->name);
+ }
}
}
} catch (\Exception $e) {
Log::error($e->getMessage());
}
}
+
+ private function get_disk_usage(Server $server, string $docker_root_filesystem) {
+ $disk_usage = json_decode(instant_remote_process(['df -hP | awk \'BEGIN {printf"{\"disks\":["}{if($1=="Filesystem")next;if(a)printf",";printf"{\"mount\":\""$6"\",\"size\":\""$2"\",\"used\":\""$3"\",\"avail\":\""$4"\",\"use%\":\""$5"\"}";a++;}END{print"]}";}\''], $server), true);
+ $mount_point = collect(data_get($disk_usage, 'disks'))->where('mount', $docker_root_filesystem)->first();
+ return Str::of(data_get($mount_point, 'use%'))->trim()->replace('%', '')->value();
+ }
}
\ No newline at end of file
diff --git a/app/Jobs/ProxyCheckJob.php b/app/Jobs/ProxyCheckJob.php
index bdc38b875..ab04d3d07 100755
--- a/app/Jobs/ProxyCheckJob.php
+++ b/app/Jobs/ProxyCheckJob.php
@@ -2,7 +2,7 @@
namespace App\Jobs;
-use App\Actions\Proxy\InstallProxy;
+use App\Actions\Proxy\StartProxy;
use App\Enums\ProxyTypes;
use App\Models\Server;
use Illuminate\Bus\Queueable;
@@ -15,30 +15,23 @@ class ProxyCheckJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- /**
- * Create a new job instance.
- */
public function __construct()
{
}
-
- /**
- * Execute the job.
- */
public function handle()
{
try {
$container_name = 'coolify-proxy';
- $servers = Server::whereRelation('settings', 'is_usable', true)->where('proxy->type', ProxyTypes::TRAEFIK_V2)->get();
-
+ $servers = Server::isUsable()->whereNotNull('proxy')->get();
foreach ($servers as $server) {
$status = get_container_status(server: $server, container_id: $container_name);
if ($status === 'running') {
continue;
}
- resolve(InstallProxy::class)($server);
+ resolve(StartProxy::class)($server);
}
} catch (\Throwable $th) {
+ ray($th->getMessage());
//throw $th;
}
}
diff --git a/app/Jobs/ProxyContainerStatusJob.php b/app/Jobs/ProxyContainerStatusJob.php
index 7c4b15ca5..02cd37568 100644
--- a/app/Jobs/ProxyContainerStatusJob.php
+++ b/app/Jobs/ProxyContainerStatusJob.php
@@ -49,7 +49,10 @@ public function handle(): void
$this->server->save();
}
} catch (\Exception $e) {
- ray($e->getMessage());
+ if ($e->getCode() === 1) {
+ $this->server->proxy->status = 'exited';
+ $this->server->save();
+ }
}
}
}
diff --git a/app/Jobs/ProxyStartJob.php b/app/Jobs/ProxyStartJob.php
new file mode 100755
index 000000000..074d21664
--- /dev/null
+++ b/app/Jobs/ProxyStartJob.php
@@ -0,0 +1,35 @@
+server->name);
+ $status = get_container_status(server: $this->server, container_id: $container_name);
+ if ($status === 'running') {
+ return;
+ }
+ resolve(StartProxy::class)($this->server);
+ } catch (\Throwable $th) {
+ ray($th->getMessage());
+ //throw $th;
+ }
+ }
+}
diff --git a/app/Models/InstanceSettings.php b/app/Models/InstanceSettings.php
index fefd315ce..b5c01f1fb 100644
--- a/app/Models/InstanceSettings.php
+++ b/app/Models/InstanceSettings.php
@@ -12,11 +12,13 @@
class InstanceSettings extends Model implements SendsEmail
{
use Notifiable, SchemalessAttributesTrait;
+ protected $guarded = [];
protected $schemalessAttributes = [
'smtp',
];
protected $casts = [
'smtp' => SchemalessAttributes::class,
+ 'resale_license' => 'encrypted',
];
public function scopeWithSmtp(): Builder
{
diff --git a/app/Models/Server.php b/app/Models/Server.php
index d3fabe967..31e2d1e5c 100644
--- a/app/Models/Server.php
+++ b/app/Models/Server.php
@@ -84,16 +84,24 @@ public function muxFilename()
{
return "{$this->ip}_{$this->port}_{$this->user}";
}
+ public function team()
+ {
+ return $this->belongsTo(Team::class);
+ }
static public function ownedByCurrentTeam(array $select = ['*'])
{
$selectArray = collect($select)->concat(['id']);
return Server::whereTeamId(session('currentTeam')->id)->with('settings')->select($selectArray->all())->orderBy('name');
}
- static public function validated()
+ static public function isReachable()
{
return Server::ownedByCurrentTeam()->whereRelation('settings', 'is_reachable', true);
}
+ static public function isUsable()
+ {
+ return Server::ownedByCurrentTeam()->whereRelation('settings', 'is_reachable', true)->whereRelation('settings', 'is_usable', true);
+ }
static public function destinationsByServer(string $server_id)
{
diff --git a/app/Models/Subscription.php b/app/Models/Subscription.php
new file mode 100644
index 000000000..380660b77
--- /dev/null
+++ b/app/Models/Subscription.php
@@ -0,0 +1,15 @@
+belongsTo(Team::class);
+ }
+}
diff --git a/app/Models/Team.php b/app/Models/Team.php
index cf9a1f5cb..ad860dd72 100644
--- a/app/Models/Team.php
+++ b/app/Models/Team.php
@@ -66,7 +66,10 @@ public function routeNotificationForEmail(string $attribute = 'recipients')
}
-
+ public function subscription()
+ {
+ return $this->hasOne(Subscription::class);
+ }
public function projects()
{
return $this->hasMany(Project::class);
diff --git a/app/Models/User.php b/app/Models/User.php
index da42a977f..13753a210 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -61,8 +61,11 @@ public function routeNotificationForEmail()
{
return $this->email;
}
-
public function isAdmin()
+ {
+ return $this->pivot->role === 'admin' || $this->pivot->role === 'owner';
+ }
+ public function isAdminFromSession()
{
if (auth()->user()->id === 0) {
return true;
@@ -89,6 +92,10 @@ public function isInstanceAdmin()
});
return $found_root_team->count() > 0;
}
+ public function personalTeam()
+ {
+ return $this->teams()->where('personal_team', true)->first();
+ }
public function teams()
{
return $this->belongsToMany(Team::class)->withPivot('role');
diff --git a/app/Models/Webhook.php b/app/Models/Webhook.php
new file mode 100644
index 000000000..079b926be
--- /dev/null
+++ b/app/Models/Webhook.php
@@ -0,0 +1,14 @@
+ 'encrypted',
+ ];
+}
\ No newline at end of file
diff --git a/app/View/Components/Forms/Button.php b/app/View/Components/Forms/Button.php
new file mode 100644
index 000000000..0f33192f7
--- /dev/null
+++ b/app/View/Components/Forms/Button.php
@@ -0,0 +1,30 @@
+id)) $this->id = new Cuid2(7);
+ if (is_null($this->name)) $this->name = $this->id;
+
+ $this->label = Str::title($this->label);
+ return view('components.forms.select');
+ }
+}
diff --git a/app/View/Components/Forms/Textarea.php b/app/View/Components/Forms/Textarea.php
new file mode 100644
index 000000000..f4d1f0bee
--- /dev/null
+++ b/app/View/Components/Forms/Textarea.php
@@ -0,0 +1,43 @@
+id)) $this->id = new Cuid2(7);
+ if (is_null($this->name)) $this->name = $this->id;
+
+ $this->label = Str::title($this->label);
+ return view('components.forms.textarea');
+ }
+}
diff --git a/app/View/Components/Modal.php b/app/View/Components/Modal.php
new file mode 100644
index 000000000..b317d3c44
--- /dev/null
+++ b/app/View/Components/Modal.php
@@ -0,0 +1,33 @@
+json();
if ($response->failed() && $throwError) {
- throw new \Exception("Failed to get data from {$source->name} with error:
" . $json['message']);
+ throw new \Exception("Failed to get data from {$source->name} with error:
" . $json['message'] . "
Rate Limit resets at: " . Carbon::parse((int)$response->header('X-RateLimit-Reset'))->format('Y-m-d H:i:s') . 'UTC');
}
return [
'rate_limit_remaining' => $response->header('X-RateLimit-Remaining'),
diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php
index fadd19255..cb718d8aa 100644
--- a/bootstrap/helpers/remoteProcess.php
+++ b/bootstrap/helpers/remoteProcess.php
@@ -114,7 +114,7 @@ function instant_remote_process(array $command, Server $server, $throwError = tr
if (!$throwError) {
return null;
}
- throw new \RuntimeException($process->errorOutput());
+ throw new \RuntimeException($process->errorOutput(), $exitCode);
}
return $output;
}
diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php
index 42359becd..71a2f3560 100644
--- a/bootstrap/helpers/shared.php
+++ b/bootstrap/helpers/shared.php
@@ -4,6 +4,7 @@
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Route;
+use Illuminate\Support\Facades\URL;
use Visus\Cuid2\Cuid2;
use Illuminate\Support\Str;
@@ -127,3 +128,7 @@ function isDev()
{
return config('app.env') === 'local';
}
+function isCloud()
+{
+ return !config('coolify.self_hosted');
+}
diff --git a/bootstrap/helpers/subscriptions.php b/bootstrap/helpers/subscriptions.php
new file mode 100644
index 000000000..bf7847cda
--- /dev/null
+++ b/bootstrap/helpers/subscriptions.php
@@ -0,0 +1,46 @@
+user()->id;
+ $team_id = auth()->user()->currentTeam()->id ?? null;
+ $email = auth()->user()->email ?? null;
+ $name = auth()->user()->name ?? null;
+ $checkout_id = config('coolify.lemon_squeezy_checkout_id');
+ $url = "https://store.coollabs.io/checkout/buy/$checkout_id?";
+ if ($user_id) {
+ $url .= "&checkout[custom][user_id]={$user_id}";
+ }
+ if (isset($team_id)) {
+ $url .= "&checkout[custom][team_id]={$team_id}";
+ }
+ if ($email) {
+ $url .= "&checkout[email]={$email}";
+ }
+ if ($name) {
+ $url .= "&checkout[name]={$name}";
+ }
+ return $url;
+}
+function getPaymentLink()
+{
+ return auth()->user()->currentTeam()->subscription->lemon_update_payment_menthod_url;
+}
+function getRenewDate()
+{
+ return Carbon::parse(auth()->user()->currentTeam()->subscription->lemon_renews_at)->format('Y-M-d H:i:s');
+}
+function getEndDate()
+{
+ return Carbon::parse(auth()->user()->currentTeam()->subscription->lemon_renews_at)->format('Y-M-d H:i:s');
+}
+function isSubscribed()
+{
+ return
+ auth()->user()?->currentTeam()?->subscription?->lemon_status === 'active' ||
+ (auth()->user()?->currentTeam()?->subscription?->lemon_ends_at &&
+ Carbon::parse(auth()->user()->currentTeam()->subscription->lemon_ends_at) > Carbon::now()
+ ) || auth()->user()->isInstanceAdmin();
+}
diff --git a/composer.lock b/composer.lock
index f4d2b9c40..ebff3b9e2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -401,16 +401,16 @@
},
{
"name": "doctrine/dbal",
- "version": "3.6.2",
+ "version": "3.6.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c"
+ "reference": "19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c",
- "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f",
+ "reference": "19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f",
"shasum": ""
},
"require": {
@@ -423,12 +423,12 @@
"psr/log": "^1|^2|^3"
},
"require-dev": {
- "doctrine/coding-standard": "11.1.0",
+ "doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2022.3",
- "phpstan/phpstan": "1.10.9",
+ "phpstan/phpstan": "1.10.14",
"phpstan/phpstan-strict-rules": "^1.5",
- "phpunit/phpunit": "9.6.6",
+ "phpunit/phpunit": "9.6.7",
"psalm/plugin-phpunit": "0.18.4",
"squizlabs/php_codesniffer": "3.7.2",
"symfony/cache": "^5.4|^6.0",
@@ -493,7 +493,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.6.2"
+ "source": "https://github.com/doctrine/dbal/tree/3.6.4"
},
"funding": [
{
@@ -509,29 +509,33 @@
"type": "tidelift"
}
],
- "time": "2023-04-14T07:25:38+00:00"
+ "time": "2023-06-15T07:40:12+00:00"
},
{
"name": "doctrine/deprecations",
- "version": "v1.1.0",
+ "version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "8cffffb2218e01f3b370bf763e00e81697725259"
+ "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/8cffffb2218e01f3b370bf763e00e81697725259",
- "reference": "8cffffb2218e01f3b370bf763e00e81697725259",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
+ "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
"shasum": ""
},
"require": {
- "php": "^7.1|^8.0"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
- "phpunit/phpunit": "^7.5|^8.5|^9.5",
- "psr/log": "^1|^2|^3"
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@@ -550,9 +554,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/v1.1.0"
+ "source": "https://github.com/doctrine/deprecations/tree/v1.1.1"
},
- "time": "2023-05-29T18:55:17+00:00"
+ "time": "2023-06-03T09:27:29+00:00"
},
{
"name": "doctrine/event-manager",
@@ -647,28 +651,28 @@
},
{
"name": "doctrine/inflector",
- "version": "2.0.6",
+ "version": "2.0.8",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024"
+ "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024",
- "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
+ "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^10",
+ "doctrine/coding-standard": "^11.0",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-phpunit": "^1.1",
"phpstan/phpstan-strict-rules": "^1.3",
"phpunit/phpunit": "^8.5 || ^9.5",
- "vimeo/psalm": "^4.25"
+ "vimeo/psalm": "^4.25 || ^5.4"
},
"type": "library",
"autoload": {
@@ -718,7 +722,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.6"
+ "source": "https://github.com/doctrine/inflector/tree/2.0.8"
},
"funding": [
{
@@ -734,7 +738,7 @@
"type": "tidelift"
}
],
- "time": "2022-10-20T09:10:12+00:00"
+ "time": "2023-06-16T13:40:37+00:00"
},
{
"name": "doctrine/lexer",
@@ -1602,16 +1606,16 @@
},
{
"name": "laravel/fortify",
- "version": "v1.17.2",
+ "version": "v1.17.4",
"source": {
"type": "git",
"url": "https://github.com/laravel/fortify.git",
- "reference": "fc4b9b00b0d657dd035751b286f412976596ba32"
+ "reference": "110dd0d09b70461d651218240120e24ba8d8cbe1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/fortify/zipball/fc4b9b00b0d657dd035751b286f412976596ba32",
- "reference": "fc4b9b00b0d657dd035751b286f412976596ba32",
+ "url": "https://api.github.com/repos/laravel/fortify/zipball/110dd0d09b70461d651218240120e24ba8d8cbe1",
+ "reference": "110dd0d09b70461d651218240120e24ba8d8cbe1",
"shasum": ""
},
"require": {
@@ -1662,20 +1666,20 @@
"issues": "https://github.com/laravel/fortify/issues",
"source": "https://github.com/laravel/fortify"
},
- "time": "2023-04-26T13:35:07+00:00"
+ "time": "2023-06-18T09:17:00+00:00"
},
{
"name": "laravel/framework",
- "version": "v10.13.0",
+ "version": "v10.15.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "7322723585103082758d74917db62980684845cb"
+ "reference": "c7599dc92e04532824bafbd226c2936ce6a905b8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/7322723585103082758d74917db62980684845cb",
- "reference": "7322723585103082758d74917db62980684845cb",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/c7599dc92e04532824bafbd226c2936ce6a905b8",
+ "reference": "c7599dc92e04532824bafbd226c2936ce6a905b8",
"shasum": ""
},
"require": {
@@ -1862,20 +1866,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2023-05-30T14:46:25+00:00"
+ "time": "2023-07-11T13:43:52+00:00"
},
{
"name": "laravel/horizon",
- "version": "v5.16.1",
+ "version": "v5.18.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/horizon.git",
- "reference": "ddd6a49063ba3bdfdf5f8ce885d27a8368ad03c4"
+ "reference": "b14498a09af826035e46ae8d6b013d0ec849bdb7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/horizon/zipball/ddd6a49063ba3bdfdf5f8ce885d27a8368ad03c4",
- "reference": "ddd6a49063ba3bdfdf5f8ce885d27a8368ad03c4",
+ "url": "https://api.github.com/repos/laravel/horizon/zipball/b14498a09af826035e46ae8d6b013d0ec849bdb7",
+ "reference": "b14498a09af826035e46ae8d6b013d0ec849bdb7",
"shasum": ""
},
"require": {
@@ -1938,9 +1942,9 @@
],
"support": {
"issues": "https://github.com/laravel/horizon/issues",
- "source": "https://github.com/laravel/horizon/tree/v5.16.1"
+ "source": "https://github.com/laravel/horizon/tree/v5.18.0"
},
- "time": "2023-05-29T15:03:42+00:00"
+ "time": "2023-06-30T15:11:51+00:00"
},
{
"name": "laravel/sanctum",
@@ -2740,16 +2744,16 @@
},
{
"name": "masmerise/livewire-toaster",
- "version": "1.2.0",
+ "version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/masmerise/livewire-toaster.git",
- "reference": "2706d3822e111af8272ebc117cb2c69228d14faf"
+ "reference": "a47875b10a7dfd41ad832d79cdfdfce0291dac25"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/masmerise/livewire-toaster/zipball/2706d3822e111af8272ebc117cb2c69228d14faf",
- "reference": "2706d3822e111af8272ebc117cb2c69228d14faf",
+ "url": "https://api.github.com/repos/masmerise/livewire-toaster/zipball/a47875b10a7dfd41ad832d79cdfdfce0291dac25",
+ "reference": "a47875b10a7dfd41ad832d79cdfdfce0291dac25",
"shasum": ""
},
"require": {
@@ -2802,22 +2806,22 @@
],
"support": {
"issues": "https://github.com/masmerise/livewire-toaster/issues",
- "source": "https://github.com/masmerise/livewire-toaster/tree/1.2.0"
+ "source": "https://github.com/masmerise/livewire-toaster/tree/1.2.1"
},
- "time": "2023-06-13T11:44:44+00:00"
+ "time": "2023-07-03T19:45:56+00:00"
},
{
"name": "monolog/monolog",
- "version": "3.3.1",
+ "version": "3.4.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "9b5daeaffce5b926cac47923798bba91059e60e2"
+ "reference": "e2392369686d420ca32df3803de28b5d6f76867d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2",
- "reference": "9b5daeaffce5b926cac47923798bba91059e60e2",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d",
+ "reference": "e2392369686d420ca32df3803de28b5d6f76867d",
"shasum": ""
},
"require": {
@@ -2832,7 +2836,7 @@
"doctrine/couchdb": "~1.0@dev",
"elasticsearch/elasticsearch": "^7 || ^8",
"ext-json": "*",
- "graylog2/gelf-php": "^1.4.2 || ^2@dev",
+ "graylog2/gelf-php": "^1.4.2 || ^2.0",
"guzzlehttp/guzzle": "^7.4.5",
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
@@ -2840,7 +2844,7 @@
"phpstan/phpstan": "^1.9",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-strict-rules": "^1.4",
- "phpunit/phpunit": "^9.5.26",
+ "phpunit/phpunit": "^10.1",
"predis/predis": "^1.1 || ^2",
"ruflin/elastica": "^7",
"symfony/mailer": "^5.4 || ^6",
@@ -2893,7 +2897,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/3.3.1"
+ "source": "https://github.com/Seldaek/monolog/tree/3.4.0"
},
"funding": [
{
@@ -2905,20 +2909,20 @@
"type": "tidelift"
}
],
- "time": "2023-02-06T13:46:10+00:00"
+ "time": "2023-06-21T08:46:11+00:00"
},
{
"name": "nesbot/carbon",
- "version": "2.67.0",
+ "version": "2.68.1",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8"
+ "reference": "4f991ed2a403c85efbc4f23eb4030063fdbe01da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c1001b3bc75039b07f38a79db5237c4c529e04c8",
- "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4f991ed2a403c85efbc4f23eb4030063fdbe01da",
+ "reference": "4f991ed2a403c85efbc4f23eb4030063fdbe01da",
"shasum": ""
},
"require": {
@@ -3007,7 +3011,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-25T22:09:47+00:00"
+ "time": "2023-06-20T18:29:04+00:00"
},
{
"name": "nette/schema",
@@ -3160,16 +3164,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.15.5",
+ "version": "v4.16.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e"
+ "reference": "19526a33fb561ef417e822e85f08a00db4059c17"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/11e2663a5bc9db5d714eedb4277ee300403b4a9e",
- "reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17",
+ "reference": "19526a33fb561ef417e822e85f08a00db4059c17",
"shasum": ""
},
"require": {
@@ -3210,9 +3214,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.5"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0"
},
- "time": "2023-05-19T20:20:00+00:00"
+ "time": "2023-06-25T14:52:30+00:00"
},
{
"name": "nubs/random-name-generator",
@@ -3569,16 +3573,16 @@
},
{
"name": "php-http/discovery",
- "version": "1.18.1",
+ "version": "1.19.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
- "reference": "f258b3a1d16acb7b21f3b42d7a2494a733365237"
+ "reference": "57f3de01d32085fea20865f9b16fb0e69347c39e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/discovery/zipball/f258b3a1d16acb7b21f3b42d7a2494a733365237",
- "reference": "f258b3a1d16acb7b21f3b42d7a2494a733365237",
+ "url": "https://api.github.com/repos/php-http/discovery/zipball/57f3de01d32085fea20865f9b16fb0e69347c39e",
+ "reference": "57f3de01d32085fea20865f9b16fb0e69347c39e",
"shasum": ""
},
"require": {
@@ -3641,9 +3645,9 @@
],
"support": {
"issues": "https://github.com/php-http/discovery/issues",
- "source": "https://github.com/php-http/discovery/tree/1.18.1"
+ "source": "https://github.com/php-http/discovery/tree/1.19.1"
},
- "time": "2023-05-17T08:53:10+00:00"
+ "time": "2023-07-11T07:02:26+00:00"
},
{
"name": "php-http/httplug",
@@ -4071,22 +4075,23 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.21.3",
+ "version": "1.22.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "b0c366dd2cea79407d635839d25423ba07c55dd6"
+ "reference": "65c39594fbd8c67abfc68bb323f86447bab79cc0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b0c366dd2cea79407d635839d25423ba07c55dd6",
- "reference": "b0c366dd2cea79407d635839d25423ba07c55dd6",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/65c39594fbd8c67abfc68bb323f86447bab79cc0",
+ "reference": "65c39594fbd8c67abfc68bb323f86447bab79cc0",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
+ "doctrine/annotations": "^2.0",
"nikic/php-parser": "^4.15",
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/extension-installer": "^1.0",
@@ -4111,9 +4116,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.21.3"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.22.1"
},
- "time": "2023-05-29T19:31:28+00:00"
+ "time": "2023-06-29T20:46:06+00:00"
},
{
"name": "pimple/pimple",
@@ -4984,21 +4989,21 @@
},
{
"name": "sentry/sdk",
- "version": "3.4.0",
+ "version": "3.5.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php-sdk.git",
- "reference": "7f1e04a5380a91e41a1a68c363ec19f88619a870"
+ "reference": "cd91b752f07c4bab9fb3b173f81af68a78a78d6d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/7f1e04a5380a91e41a1a68c363ec19f88619a870",
- "reference": "7f1e04a5380a91e41a1a68c363ec19f88619a870",
+ "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/cd91b752f07c4bab9fb3b173f81af68a78a78d6d",
+ "reference": "cd91b752f07c4bab9fb3b173f81af68a78a78d6d",
"shasum": ""
},
"require": {
"http-interop/http-factory-guzzle": "^1.0",
- "sentry/sentry": "^3.18",
+ "sentry/sentry": "^3.19",
"symfony/http-client": "^4.3|^5.0|^6.0"
},
"type": "metapackage",
@@ -5025,7 +5030,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php-sdk/issues",
- "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.4.0"
+ "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.5.0"
},
"funding": [
{
@@ -5037,20 +5042,20 @@
"type": "custom"
}
],
- "time": "2023-05-22T16:02:39+00:00"
+ "time": "2023-06-12T17:50:36+00:00"
},
{
"name": "sentry/sentry",
- "version": "3.19.1",
+ "version": "3.20.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
- "reference": "dd1057fb37d4484ebb2d1bc9b05fa5969c078436"
+ "reference": "644ad9768c18139a80ac510090fad000d9ffd8a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/dd1057fb37d4484ebb2d1bc9b05fa5969c078436",
- "reference": "dd1057fb37d4484ebb2d1bc9b05fa5969c078436",
+ "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/644ad9768c18139a80ac510090fad000d9ffd8a4",
+ "reference": "644ad9768c18139a80ac510090fad000d9ffd8a4",
"shasum": ""
},
"require": {
@@ -5130,7 +5135,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php/issues",
- "source": "https://github.com/getsentry/sentry-php/tree/3.19.1"
+ "source": "https://github.com/getsentry/sentry-php/tree/3.20.1"
},
"funding": [
{
@@ -5142,28 +5147,28 @@
"type": "custom"
}
],
- "time": "2023-05-25T06:19:09+00:00"
+ "time": "2023-06-26T11:01:40+00:00"
},
{
"name": "sentry/sentry-laravel",
- "version": "3.4.1",
+ "version": "3.6.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-laravel.git",
- "reference": "516df9df80414a71fa5464039746e8e98b066e09"
+ "reference": "eb94a52b88794d0c108dc46ca1a680531c3a8bad"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/516df9df80414a71fa5464039746e8e98b066e09",
- "reference": "516df9df80414a71fa5464039746e8e98b066e09",
+ "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/eb94a52b88794d0c108dc46ca1a680531c3a8bad",
+ "reference": "eb94a52b88794d0c108dc46ca1a680531c3a8bad",
"shasum": ""
},
"require": {
"illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0",
"nyholm/psr7": "^1.0",
"php": "^7.2 | ^8.0",
- "sentry/sdk": "^3.3",
- "sentry/sentry": "^3.16",
+ "sentry/sdk": "^3.4",
+ "sentry/sentry": "^3.20",
"symfony/psr-http-message-bridge": "^1.0 | ^2.0"
},
"require-dev": {
@@ -5220,7 +5225,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-laravel/issues",
- "source": "https://github.com/getsentry/sentry-laravel/tree/3.4.1"
+ "source": "https://github.com/getsentry/sentry-laravel/tree/3.6.1"
},
"funding": [
{
@@ -5232,20 +5237,20 @@
"type": "custom"
}
],
- "time": "2023-05-31T10:43:06+00:00"
+ "time": "2023-07-04T10:30:42+00:00"
},
{
"name": "spatie/backtrace",
- "version": "1.4.0",
+ "version": "1.5.3",
"source": {
"type": "git",
"url": "https://github.com/spatie/backtrace.git",
- "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c"
+ "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/backtrace/zipball/ec4dd16476b802dbdc6b4467f84032837e316b8c",
- "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c",
+ "url": "https://api.github.com/repos/spatie/backtrace/zipball/483f76a82964a0431aa836b6ed0edde0c248e3ab",
+ "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab",
"shasum": ""
},
"require": {
@@ -5282,7 +5287,7 @@
"spatie"
],
"support": {
- "source": "https://github.com/spatie/backtrace/tree/1.4.0"
+ "source": "https://github.com/spatie/backtrace/tree/1.5.3"
},
"funding": [
{
@@ -5294,7 +5299,7 @@
"type": "other"
}
],
- "time": "2023-03-04T08:57:24+00:00"
+ "time": "2023-06-28T12:59:17+00:00"
},
{
"name": "spatie/laravel-activitylog",
@@ -5389,16 +5394,16 @@
},
{
"name": "spatie/laravel-data",
- "version": "3.5.1",
+ "version": "3.7.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-data.git",
- "reference": "2ca317a41b52df78c48602f227da383ff8683b21"
+ "reference": "a975123d86e0133a361ac225d17acb3d11aa351f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-data/zipball/2ca317a41b52df78c48602f227da383ff8683b21",
- "reference": "2ca317a41b52df78c48602f227da383ff8683b21",
+ "url": "https://api.github.com/repos/spatie/laravel-data/zipball/a975123d86e0133a361ac225d17acb3d11aa351f",
+ "reference": "a975123d86e0133a361ac225d17acb3d11aa351f",
"shasum": ""
},
"require": {
@@ -5460,7 +5465,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-data/issues",
- "source": "https://github.com/spatie/laravel-data/tree/3.5.1"
+ "source": "https://github.com/spatie/laravel-data/tree/3.7.0"
},
"funding": [
{
@@ -5468,7 +5473,7 @@
"type": "github"
}
],
- "time": "2023-05-12T12:12:37+00:00"
+ "time": "2023-07-05T11:45:14+00:00"
},
{
"name": "spatie/laravel-package-tools",
@@ -5532,16 +5537,16 @@
},
{
"name": "spatie/laravel-ray",
- "version": "1.32.4",
+ "version": "1.32.5",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ray.git",
- "reference": "2274653f0a90dd87fbb887437be1c1ea1388a47c"
+ "reference": "288f30c94c9725dfd78d8a1b82b230521f4d697e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/2274653f0a90dd87fbb887437be1c1ea1388a47c",
- "reference": "2274653f0a90dd87fbb887437be1c1ea1388a47c",
+ "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/288f30c94c9725dfd78d8a1b82b230521f4d697e",
+ "reference": "288f30c94c9725dfd78d8a1b82b230521f4d697e",
"shasum": ""
},
"require": {
@@ -5601,7 +5606,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-ray/issues",
- "source": "https://github.com/spatie/laravel-ray/tree/1.32.4"
+ "source": "https://github.com/spatie/laravel-ray/tree/1.32.5"
},
"funding": [
{
@@ -5613,7 +5618,7 @@
"type": "other"
}
],
- "time": "2023-03-23T08:04:54+00:00"
+ "time": "2023-06-23T07:04:32+00:00"
},
{
"name": "spatie/laravel-schemaless-attributes",
@@ -6397,16 +6402,16 @@
},
{
"name": "symfony/http-client",
- "version": "v6.3.0",
+ "version": "v6.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "b2f892c91e4e02a939edddeb7ef452522d10a424"
+ "reference": "1c828a06aef2f5eeba42026dfc532d4fc5406123"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/b2f892c91e4e02a939edddeb7ef452522d10a424",
- "reference": "b2f892c91e4e02a939edddeb7ef452522d10a424",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/1c828a06aef2f5eeba42026dfc532d4fc5406123",
+ "reference": "1c828a06aef2f5eeba42026dfc532d4fc5406123",
"shasum": ""
},
"require": {
@@ -6469,7 +6474,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v6.3.0"
+ "source": "https://github.com/symfony/http-client/tree/v6.3.1"
},
"funding": [
{
@@ -6485,7 +6490,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-12T08:49:48+00:00"
+ "time": "2023-06-24T11:51:27+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -6567,16 +6572,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v6.3.0",
+ "version": "v6.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb"
+ "reference": "e0ad0d153e1c20069250986cd9e9dd1ccebb0d66"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/718a97ed430d34e5c568ea2c44eab708c6efbefb",
- "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e0ad0d153e1c20069250986cd9e9dd1ccebb0d66",
+ "reference": "e0ad0d153e1c20069250986cd9e9dd1ccebb0d66",
"shasum": ""
},
"require": {
@@ -6624,7 +6629,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.3.0"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.3.1"
},
"funding": [
{
@@ -6640,20 +6645,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-19T12:46:45+00:00"
+ "time": "2023-06-24T11:51:27+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.3.0",
+ "version": "v6.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "241973f3dd900620b1ca052fe409144f11aea748"
+ "reference": "161e16fd2e35fb4881a43bc8b383dfd5be4ac374"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/241973f3dd900620b1ca052fe409144f11aea748",
- "reference": "241973f3dd900620b1ca052fe409144f11aea748",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/161e16fd2e35fb4881a43bc8b383dfd5be4ac374",
+ "reference": "161e16fd2e35fb4881a43bc8b383dfd5be4ac374",
"shasum": ""
},
"require": {
@@ -6737,7 +6742,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v6.3.0"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.3.1"
},
"funding": [
{
@@ -6753,7 +6758,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-30T19:03:32+00:00"
+ "time": "2023-06-26T06:07:32+00:00"
},
{
"name": "symfony/mailer",
@@ -7954,16 +7959,16 @@
},
{
"name": "symfony/routing",
- "version": "v6.3.0",
+ "version": "v6.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b"
+ "reference": "d37ad1779c38b8eb71996d17dc13030dcb7f9cf5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b",
- "reference": "827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/d37ad1779c38b8eb71996d17dc13030dcb7f9cf5",
+ "reference": "d37ad1779c38b8eb71996d17dc13030dcb7f9cf5",
"shasum": ""
},
"require": {
@@ -8016,7 +8021,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v6.3.0"
+ "source": "https://github.com/symfony/routing/tree/v6.3.1"
},
"funding": [
{
@@ -8032,7 +8037,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-28T15:57:00+00:00"
+ "time": "2023-06-05T15:30:22+00:00"
},
{
"name": "symfony/service-contracts",
@@ -8512,16 +8517,16 @@
},
{
"name": "symfony/var-dumper",
- "version": "v6.3.0",
+ "version": "v6.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "6acdcd5c122074ee9f7b051e4fb177025c277a0e"
+ "reference": "c81268d6960ddb47af17391a27d222bd58cf0515"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6acdcd5c122074ee9f7b051e4fb177025c277a0e",
- "reference": "6acdcd5c122074ee9f7b051e4fb177025c277a0e",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c81268d6960ddb47af17391a27d222bd58cf0515",
+ "reference": "c81268d6960ddb47af17391a27d222bd58cf0515",
"shasum": ""
},
"require": {
@@ -8574,7 +8579,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.3.0"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.3.1"
},
"funding": [
{
@@ -8590,7 +8595,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-25T13:09:35+00:00"
+ "time": "2023-06-21T12:08:28+00:00"
},
{
"name": "symfony/yaml",
@@ -9202,16 +9207,16 @@
"packages-dev": [
{
"name": "brianium/paratest",
- "version": "v7.1.4",
+ "version": "v7.2.2",
"source": {
"type": "git",
"url": "https://github.com/paratestphp/paratest.git",
- "reference": "153e68eb9e697baa3acf1db1d8ae1d1eb19fb816"
+ "reference": "eb9d6b0924bf39781ab7a7ed1d7db89514f9ea76"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paratestphp/paratest/zipball/153e68eb9e697baa3acf1db1d8ae1d1eb19fb816",
- "reference": "153e68eb9e697baa3acf1db1d8ae1d1eb19fb816",
+ "url": "https://api.github.com/repos/paratestphp/paratest/zipball/eb9d6b0924bf39781ab7a7ed1d7db89514f9ea76",
+ "reference": "eb9d6b0924bf39781ab7a7ed1d7db89514f9ea76",
"shasum": ""
},
"require": {
@@ -9221,26 +9226,26 @@
"ext-simplexml": "*",
"fidry/cpu-core-counter": "^0.4.1 || ^0.5.1",
"jean85/pretty-package-versions": "^2.0.5",
- "php": "~8.1.0 || ~8.2.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
"phpunit/php-code-coverage": "^10.1.1",
- "phpunit/php-file-iterator": "^4.0.1",
+ "phpunit/php-file-iterator": "^4.0.2",
"phpunit/php-timer": "^6.0",
- "phpunit/phpunit": "^10.1.2",
+ "phpunit/phpunit": "^10.2.2",
"sebastian/environment": "^6.0.1",
- "symfony/console": "^6.2.10",
- "symfony/process": "^6.2.10"
+ "symfony/console": "^6.3.0",
+ "symfony/process": "^6.3.0"
},
"require-dev": {
"doctrine/coding-standard": "^12.0.0",
"ext-pcov": "*",
"ext-posix": "*",
- "infection/infection": "^0.26.21",
- "phpstan/phpstan": "^1.10.14",
+ "infection/infection": "^0.27.0",
+ "phpstan/phpstan": "^1.10.18",
"phpstan/phpstan-deprecation-rules": "^1.1.3",
- "phpstan/phpstan-phpunit": "^1.3.11",
+ "phpstan/phpstan-phpunit": "^1.3.13",
"phpstan/phpstan-strict-rules": "^1.5.1",
"squizlabs/php_codesniffer": "^3.7.2",
- "symfony/filesystem": "^6.2.10"
+ "symfony/filesystem": "^6.3.0"
},
"bin": [
"bin/paratest",
@@ -9281,7 +9286,7 @@
],
"support": {
"issues": "https://github.com/paratestphp/paratest/issues",
- "source": "https://github.com/paratestphp/paratest/tree/v7.1.4"
+ "source": "https://github.com/paratestphp/paratest/tree/v7.2.2"
},
"funding": [
{
@@ -9293,20 +9298,20 @@
"type": "paypal"
}
],
- "time": "2023-05-05T09:09:30+00:00"
+ "time": "2023-06-22T14:22:36+00:00"
},
{
"name": "fakerphp/faker",
- "version": "v1.22.0",
+ "version": "v1.23.0",
"source": {
"type": "git",
"url": "https://github.com/FakerPHP/Faker.git",
- "reference": "f85772abd508bd04e20bb4b1bbe260a68d0066d2"
+ "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/f85772abd508bd04e20bb4b1bbe260a68d0066d2",
- "reference": "f85772abd508bd04e20bb4b1bbe260a68d0066d2",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
+ "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
"shasum": ""
},
"require": {
@@ -9359,9 +9364,9 @@
],
"support": {
"issues": "https://github.com/FakerPHP/Faker/issues",
- "source": "https://github.com/FakerPHP/Faker/tree/v1.22.0"
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0"
},
- "time": "2023-05-14T12:31:37+00:00"
+ "time": "2023-06-12T08:44:38+00:00"
},
{
"name": "fidry/cpu-core-counter",
@@ -9426,16 +9431,16 @@
},
{
"name": "filp/whoops",
- "version": "2.15.2",
+ "version": "2.15.3",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73"
+ "reference": "c83e88a30524f9360b11f585f71e6b17313b7187"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/aac9304c5ed61bf7b1b7a6064bf9806ab842ce73",
- "reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187",
+ "reference": "c83e88a30524f9360b11f585f71e6b17313b7187",
"shasum": ""
},
"require": {
@@ -9485,7 +9490,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.15.2"
+ "source": "https://github.com/filp/whoops/tree/2.15.3"
},
"funding": [
{
@@ -9493,7 +9498,7 @@
"type": "github"
}
],
- "time": "2023-04-12T12:00:00+00:00"
+ "time": "2023-07-13T12:00:00+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -9548,16 +9553,16 @@
},
{
"name": "laravel/dusk",
- "version": "v7.7.1",
+ "version": "v7.8.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/dusk.git",
- "reference": "836338ec355fc129b09f26f3cbc19de2daf065ad"
+ "reference": "82cf388bac1e0ff80f1c2c4b5107ee7c0496b3a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/dusk/zipball/836338ec355fc129b09f26f3cbc19de2daf065ad",
- "reference": "836338ec355fc129b09f26f3cbc19de2daf065ad",
+ "url": "https://api.github.com/repos/laravel/dusk/zipball/82cf388bac1e0ff80f1c2c4b5107ee7c0496b3a5",
+ "reference": "82cf388bac1e0ff80f1c2c4b5107ee7c0496b3a5",
"shasum": ""
},
"require": {
@@ -9617,22 +9622,22 @@
],
"support": {
"issues": "https://github.com/laravel/dusk/issues",
- "source": "https://github.com/laravel/dusk/tree/v7.7.1"
+ "source": "https://github.com/laravel/dusk/tree/v7.8.0"
},
- "time": "2023-04-13T14:50:22+00:00"
+ "time": "2023-07-08T21:23:29+00:00"
},
{
"name": "laravel/pint",
- "version": "v1.10.0",
+ "version": "v1.10.4",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "c7a01fa9bdd79819e7a2f1ba63ac1b02e6692dbc"
+ "reference": "f56798088068af8bd75a8f2c4ecae022990fdf75"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/c7a01fa9bdd79819e7a2f1ba63ac1b02e6692dbc",
- "reference": "c7a01fa9bdd79819e7a2f1ba63ac1b02e6692dbc",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/f56798088068af8bd75a8f2c4ecae022990fdf75",
+ "reference": "f56798088068af8bd75a8f2c4ecae022990fdf75",
"shasum": ""
},
"require": {
@@ -9643,7 +9648,7 @@
"php": "^8.1.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.16.0",
+ "friendsofphp/php-cs-fixer": "^3.21.1",
"illuminate/view": "^10.5.1",
"laravel-zero/framework": "^10.0.2",
"mockery/mockery": "^1.5.1",
@@ -9685,42 +9690,48 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2023-04-25T14:52:30+00:00"
+ "time": "2023-07-11T15:18:27+00:00"
},
{
"name": "mockery/mockery",
- "version": "1.5.1",
+ "version": "1.6.2",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
- "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e"
+ "reference": "13a7fa2642c76c58fa2806ef7f565344c817a191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e",
- "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/13a7fa2642c76c58fa2806ef7f565344c817a191",
+ "reference": "13a7fa2642c76c58fa2806ef7f565344c817a191",
"shasum": ""
},
"require": {
"hamcrest/hamcrest-php": "^2.0.1",
"lib-pcre": ">=7.0",
- "php": "^7.3 || ^8.0"
+ "php": "^7.4 || ^8.0"
},
"conflict": {
"phpunit/phpunit": "<8.0"
},
"require-dev": {
- "phpunit/phpunit": "^8.5 || ^9.3"
+ "phpunit/phpunit": "^8.5 || ^9.3",
+ "psalm/plugin-phpunit": "^0.18",
+ "vimeo/psalm": "^5.9"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4.x-dev"
+ "dev-main": "1.6.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Mockery": "library/"
+ "files": [
+ "library/helpers.php",
+ "library/Mockery.php"
+ ],
+ "psr-4": {
+ "Mockery\\": "library/Mockery"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -9755,9 +9766,9 @@
],
"support": {
"issues": "https://github.com/mockery/mockery/issues",
- "source": "https://github.com/mockery/mockery/tree/1.5.1"
+ "source": "https://github.com/mockery/mockery/tree/1.6.2"
},
- "time": "2022-09-07T15:32:08+00:00"
+ "time": "2023-06-07T09:07:52+00:00"
},
{
"name": "myclabs/deep-copy",
@@ -9820,40 +9831,40 @@
},
{
"name": "nunomaduro/collision",
- "version": "v7.5.2",
+ "version": "v7.7.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "76b3cabda0aabda455fc3b9db6c3615f5a87c7ff"
+ "reference": "69a07197d055456d29911116fca3bc2c985f524b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/76b3cabda0aabda455fc3b9db6c3615f5a87c7ff",
- "reference": "76b3cabda0aabda455fc3b9db6c3615f5a87c7ff",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/69a07197d055456d29911116fca3bc2c985f524b",
+ "reference": "69a07197d055456d29911116fca3bc2c985f524b",
"shasum": ""
},
"require": {
"filp/whoops": "^2.15.2",
"nunomaduro/termwind": "^1.15.1",
"php": "^8.1.0",
- "symfony/console": "^6.2.8"
+ "symfony/console": "^6.3.0"
},
"conflict": {
"phpunit/phpunit": "<10.1.2"
},
"require-dev": {
- "brianium/paratest": "^7.1.3",
- "laravel/framework": "^10.8.0",
- "laravel/pint": "^1.9.0",
- "laravel/sail": "^1.21.4",
- "laravel/sanctum": "^3.2.1",
+ "brianium/paratest": "^7.2.2",
+ "laravel/framework": "^10.14.1",
+ "laravel/pint": "^1.10.3",
+ "laravel/sail": "^1.23.0",
+ "laravel/sanctum": "^3.2.5",
"laravel/tinker": "^2.8.1",
- "nunomaduro/larastan": "^2.6.0",
- "orchestra/testbench-core": "^8.5.0",
- "pestphp/pest": "^2.5.2",
- "phpunit/phpunit": "^10.1.1",
+ "nunomaduro/larastan": "^2.6.3",
+ "orchestra/testbench-core": "^8.5.8",
+ "pestphp/pest": "^2.8.1",
+ "phpunit/phpunit": "^10.2.2",
"sebastian/environment": "^6.0.1",
- "spatie/laravel-ignition": "^2.1.0"
+ "spatie/laravel-ignition": "^2.2.0"
},
"type": "library",
"extra": {
@@ -9912,38 +9923,38 @@
"type": "patreon"
}
],
- "time": "2023-04-22T22:12:40+00:00"
+ "time": "2023-06-29T09:10:16+00:00"
},
{
"name": "pestphp/pest",
- "version": "v2.6.1",
+ "version": "v2.8.3",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest.git",
- "reference": "faafedd55ca4479b0634f85cc1a68bf5af44764e"
+ "reference": "805b81edc05e6b5fafe84caee8350e81c9f54842"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pestphp/pest/zipball/faafedd55ca4479b0634f85cc1a68bf5af44764e",
- "reference": "faafedd55ca4479b0634f85cc1a68bf5af44764e",
+ "url": "https://api.github.com/repos/pestphp/pest/zipball/805b81edc05e6b5fafe84caee8350e81c9f54842",
+ "reference": "805b81edc05e6b5fafe84caee8350e81c9f54842",
"shasum": ""
},
"require": {
- "brianium/paratest": "^7.1.4",
- "nunomaduro/collision": "^7.5.2",
+ "brianium/paratest": "^7.2.2",
+ "nunomaduro/collision": "^7.7.0",
"nunomaduro/termwind": "^1.15.1",
"pestphp/pest-plugin": "^2.0.1",
- "pestphp/pest-plugin-arch": "^2.1.2",
+ "pestphp/pest-plugin-arch": "^2.2.2",
"php": "^8.1.0",
- "phpunit/phpunit": "^10.1.3"
+ "phpunit/phpunit": "^10.2.3"
},
"conflict": {
- "phpunit/phpunit": ">10.1.3",
+ "phpunit/phpunit": ">10.2.3",
"webmozart/assert": "<1.11.0"
},
"require-dev": {
- "pestphp/pest-dev-tools": "^2.9.0",
- "symfony/process": "^6.2.10"
+ "pestphp/pest-dev-tools": "^2.12.0",
+ "symfony/process": "^6.3.0"
},
"bin": [
"bin/pest"
@@ -9999,7 +10010,7 @@
],
"support": {
"issues": "https://github.com/pestphp/pest/issues",
- "source": "https://github.com/pestphp/pest/tree/v2.6.1"
+ "source": "https://github.com/pestphp/pest/tree/v2.8.3"
},
"funding": [
{
@@ -10011,7 +10022,7 @@
"type": "github"
}
],
- "time": "2023-05-12T08:22:02+00:00"
+ "time": "2023-07-12T20:26:47+00:00"
},
{
"name": "pestphp/pest-plugin",
@@ -10084,27 +10095,27 @@
},
{
"name": "pestphp/pest-plugin-arch",
- "version": "v2.1.2",
+ "version": "v2.2.2",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest-plugin-arch.git",
- "reference": "485cbfbe2e194e9cfd8284625bd8922c9d27ac6f"
+ "reference": "733d5c396484c7518c53f02ffb88cf2e2f31b97d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/485cbfbe2e194e9cfd8284625bd8922c9d27ac6f",
- "reference": "485cbfbe2e194e9cfd8284625bd8922c9d27ac6f",
+ "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/733d5c396484c7518c53f02ffb88cf2e2f31b97d",
+ "reference": "733d5c396484c7518c53f02ffb88cf2e2f31b97d",
"shasum": ""
},
"require": {
- "nunomaduro/collision": "^7.5.0",
+ "nunomaduro/collision": "^7.7.0",
"pestphp/pest-plugin": "^2.0.1",
"php": "^8.1",
"ta-tikoma/phpunit-architecture-test": "^0.7.3"
},
"require-dev": {
- "pestphp/pest": "^2.5.1",
- "pestphp/pest-dev-tools": "^2.6.0"
+ "pestphp/pest": "dev-develop as 2.6.2",
+ "pestphp/pest-dev-tools": "^2.12.0"
},
"type": "library",
"autoload": {
@@ -10132,7 +10143,7 @@
"unit"
],
"support": {
- "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.1.2"
+ "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.2.2"
},
"funding": [
{
@@ -10144,7 +10155,7 @@
"type": "github"
}
],
- "time": "2023-04-19T08:48:22+00:00"
+ "time": "2023-07-08T12:39:42+00:00"
},
{
"name": "phar-io/manifest",
@@ -10382,16 +10393,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.10.15",
+ "version": "1.10.25",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd"
+ "reference": "578f4e70d117f9a90699324c555922800ac38d8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/762c4dac4da6f8756eebb80e528c3a47855da9bd",
- "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/578f4e70d117f9a90699324c555922800ac38d8c",
+ "reference": "578f4e70d117f9a90699324c555922800ac38d8c",
"shasum": ""
},
"require": {
@@ -10440,7 +10451,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-09T15:28:01+00:00"
+ "time": "2023-07-06T12:11:37+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -10764,16 +10775,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.1.3",
+ "version": "10.2.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "2379ebafc1737e71cdc84f402acb6b7f04198b9d"
+ "reference": "35c8cac1734ede2ae354a6644f7088356ff5b08e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2379ebafc1737e71cdc84f402acb6b7f04198b9d",
- "reference": "2379ebafc1737e71cdc84f402acb6b7f04198b9d",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/35c8cac1734ede2ae354a6644f7088356ff5b08e",
+ "reference": "35c8cac1734ede2ae354a6644f7088356ff5b08e",
"shasum": ""
},
"require": {
@@ -10813,7 +10824,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.1-dev"
+ "dev-main": "10.2-dev"
}
},
"autoload": {
@@ -10845,7 +10856,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.1.3"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.2.3"
},
"funding": [
{
@@ -10861,7 +10872,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-11T05:16:22+00:00"
+ "time": "2023-06-30T06:17:38+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -11820,22 +11831,23 @@
},
{
"name": "spatie/flare-client-php",
- "version": "1.3.6",
+ "version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/flare-client-php.git",
- "reference": "530ac81255af79f114344286e4275f8869c671e2"
+ "reference": "943894c6a6b00501365ac0b91ae0dce56f2226fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/530ac81255af79f114344286e4275f8869c671e2",
- "reference": "530ac81255af79f114344286e4275f8869c671e2",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/943894c6a6b00501365ac0b91ae0dce56f2226fa",
+ "reference": "943894c6a6b00501365ac0b91ae0dce56f2226fa",
"shasum": ""
},
"require": {
"illuminate/pipeline": "^8.0|^9.0|^10.0",
+ "nesbot/carbon": "^2.62.1",
"php": "^8.0",
- "spatie/backtrace": "^1.2",
+ "spatie/backtrace": "^1.5.2",
"symfony/http-foundation": "^5.0|^6.0",
"symfony/mime": "^5.2|^6.0",
"symfony/process": "^5.2|^6.0",
@@ -11852,7 +11864,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.1.x-dev"
+ "dev-main": "1.3.x-dev"
}
},
"autoload": {
@@ -11877,7 +11889,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/1.3.6"
+ "source": "https://github.com/spatie/flare-client-php/tree/1.4.1"
},
"funding": [
{
@@ -11885,28 +11897,28 @@
"type": "github"
}
],
- "time": "2023-04-12T07:57:12+00:00"
+ "time": "2023-07-06T09:29:49+00:00"
},
{
"name": "spatie/ignition",
- "version": "1.8.0",
+ "version": "1.9.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/ignition.git",
- "reference": "ad13a6792992411e05d3d3b293e26bdf9f9a7321"
+ "reference": "de24ff1e01814d5043bd6eb4ab36a5a852a04973"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/ignition/zipball/ad13a6792992411e05d3d3b293e26bdf9f9a7321",
- "reference": "ad13a6792992411e05d3d3b293e26bdf9f9a7321",
+ "url": "https://api.github.com/repos/spatie/ignition/zipball/de24ff1e01814d5043bd6eb4ab36a5a852a04973",
+ "reference": "de24ff1e01814d5043bd6eb4ab36a5a852a04973",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
"php": "^8.0",
- "spatie/backtrace": "^1.4",
- "spatie/flare-client-php": "^1.1",
+ "spatie/backtrace": "^1.5.3",
+ "spatie/flare-client-php": "^1.4.0",
"symfony/console": "^5.4|^6.0",
"symfony/var-dumper": "^5.4|^6.0"
},
@@ -11918,7 +11930,7 @@
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"psr/simple-cache-implementation": "*",
- "symfony/cache": "^6.2",
+ "symfony/cache": "^6.0",
"symfony/process": "^5.4|^6.0",
"vlucas/phpdotenv": "^5.5"
},
@@ -11968,20 +11980,20 @@
"type": "github"
}
],
- "time": "2023-05-25T10:19:32+00:00"
+ "time": "2023-06-28T13:24:59+00:00"
},
{
"name": "spatie/laravel-ignition",
- "version": "2.1.3",
+ "version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
- "reference": "35711943d4725aa80f8033e4f1cb3a6775530b25"
+ "reference": "dd15fbe82ef5392798941efae93c49395a87d943"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/35711943d4725aa80f8033e4f1cb3a6775530b25",
- "reference": "35711943d4725aa80f8033e4f1cb3a6775530b25",
+ "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/dd15fbe82ef5392798941efae93c49395a87d943",
+ "reference": "dd15fbe82ef5392798941efae93c49395a87d943",
"shasum": ""
},
"require": {
@@ -11991,7 +12003,7 @@
"illuminate/support": "^10.0",
"php": "^8.1",
"spatie/flare-client-php": "^1.3.5",
- "spatie/ignition": "^1.5.0",
+ "spatie/ignition": "^1.9",
"symfony/console": "^6.2.3",
"symfony/var-dumper": "^6.2.3"
},
@@ -12060,7 +12072,7 @@
"type": "github"
}
],
- "time": "2023-05-25T11:30:27+00:00"
+ "time": "2023-06-28T13:51:52+00:00"
},
{
"name": "ta-tikoma/phpunit-architecture-test",
@@ -12173,16 +12185,16 @@
},
{
"name": "toshy/bunnynet-php",
- "version": "3.2.0",
+ "version": "3.3.0",
"source": {
"type": "git",
"url": "https://github.com/ToshY/BunnyNet-PHP.git",
- "reference": "ca36206d7cd558e492755244b5af6b1e5125ff80"
+ "reference": "29ccf083f71d97045bc5aedf2760db9bec17c06f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ToshY/BunnyNet-PHP/zipball/ca36206d7cd558e492755244b5af6b1e5125ff80",
- "reference": "ca36206d7cd558e492755244b5af6b1e5125ff80",
+ "url": "https://api.github.com/repos/ToshY/BunnyNet-PHP/zipball/29ccf083f71d97045bc5aedf2760db9bec17c06f",
+ "reference": "29ccf083f71d97045bc5aedf2760db9bec17c06f",
"shasum": ""
},
"require": {
@@ -12194,10 +12206,10 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.13",
"phpmd/phpmd": "^2.13",
- "phpro/grumphp": "^1.15",
+ "phpro/grumphp": "^1.15 || ^2.0",
"phpstan/phpstan": "^1.9",
"phpunit/phpunit": "^10.0",
- "rector/rector": "^0.15.1"
+ "rector/rector": "^0.15.1 || ^0.16.0 || ^0.17.0"
},
"type": "library",
"autoload": {
@@ -12229,9 +12241,9 @@
],
"support": {
"issues": "https://github.com/ToshY/BunnyNet-PHP/issues",
- "source": "https://github.com/ToshY/BunnyNet-PHP/tree/3.2.0"
+ "source": "https://github.com/ToshY/BunnyNet-PHP/tree/3.3.0"
},
- "time": "2023-04-22T14:22:00+00:00"
+ "time": "2023-06-30T22:02:59+00:00"
}
],
"aliases": [],
diff --git a/config/app.php b/config/app.php
index a3347a8cd..78df1ec8a 100644
--- a/config/app.php
+++ b/config/app.php
@@ -4,6 +4,7 @@
return [
+ 'id' => env('APP_ID'),
'port' => env('APP_PORT', 8000),
/*
|--------------------------------------------------------------------------
diff --git a/config/coolify.php b/config/coolify.php
index 4e25c8745..0a4220887 100644
--- a/config/coolify.php
+++ b/config/coolify.php
@@ -2,6 +2,9 @@
return [
'self_hosted' => env('SELF_HOSTED', true),
+ 'lemon_squeezy_webhook_secret' => env('LEMON_SQUEEZY_WEBHOOK_SECRET'),
+ 'lemon_squeezy_product_id' => env('LEMON_SQUEEZY_PRODUCT_ID'),
+ 'lemon_squeezy_checkout_id' => env('LEMON_SQUEEZY_CHECKOUT_ID'),
'mux_enabled' => env('MUX_ENABLED', true),
'dev_webhook' => env('SERVEO_URL'),
'base_config_path' => env('BASE_CONFIG_PATH', '/data/coolify'),
diff --git a/config/version.php b/config/version.php
index 3a9c12a30..743126446 100644
--- a/config/version.php
+++ b/config/version.php
@@ -1,3 +1,3 @@
id();
+ $table->string('lemon_subscription_id');
+ $table->string('lemon_order_id');
+ $table->string('lemon_product_id');
+ $table->string('lemon_variant_id');
+ $table->string('lemon_variant_name');
+ $table->string('lemon_customer_id');
+ $table->string('lemon_status');
+ $table->string('lemon_trial_ends_at')->nullable();
+ $table->string('lemon_renews_at');
+ $table->string('lemon_ends_at')->nullable();
+ $table->string('lemon_update_payment_menthod_url');
+ $table->foreignId('team_id');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('subscriptions');
+ }
+};
\ No newline at end of file
diff --git a/database/migrations/2023_07_13_120719_create_webhooks_table.php b/database/migrations/2023_07_13_120719_create_webhooks_table.php
new file mode 100644
index 000000000..9376a10c9
--- /dev/null
+++ b/database/migrations/2023_07_13_120719_create_webhooks_table.php
@@ -0,0 +1,31 @@
+id();
+ $table->enum('status', ['pending', 'success', 'failed'])->default('pending');
+ $table->enum('type', ['github', 'gitlab', 'bitbucket', 'lemonsqueezy']);
+ $table->longText('payload');
+ $table->longText('failure_reason')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('webhooks');
+ }
+};
diff --git a/database/migrations/2023_07_13_120721_add_license_to_instance_settings.php b/database/migrations/2023_07_13_120721_add_license_to_instance_settings.php
new file mode 100644
index 000000000..c32cd0f9a
--- /dev/null
+++ b/database/migrations/2023_07_13_120721_add_license_to_instance_settings.php
@@ -0,0 +1,30 @@
+boolean('is_resale_license_active')->default(false);
+ $table->longText('resale_license')->nullable();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('instance_settings', function (Blueprint $table) {
+ $table->dropColumn('is_resale_license_active');
+ $table->dropColumn('resale_license');
+ });
+ }
+};
diff --git a/database/seeders/ProductionSeeder.php b/database/seeders/ProductionSeeder.php
index de46bf959..09a420504 100644
--- a/database/seeders/ProductionSeeder.php
+++ b/database/seeders/ProductionSeeder.php
@@ -83,6 +83,12 @@ public function run(): void
]);
$server = Server::create($server_details);
$server->settings->is_reachable = true;
+ $server->settings->is_usable = true;
+ $server->settings->save();
+ } else {
+ $server = Server::find(0);
+ $server->settings->is_reachable = true;
+ $server->settings->is_usable = true;
$server->settings->save();
}
if (StandaloneDocker::find(0) == null) {
diff --git a/database/seeders/ServerSeeder.php b/database/seeders/ServerSeeder.php
index 927cee11c..82ab2552b 100644
--- a/database/seeders/ServerSeeder.php
+++ b/database/seeders/ServerSeeder.php
@@ -2,7 +2,6 @@
namespace Database\Seeders;
-use App\Actions\Proxy\InstallProxy;
use App\Data\ServerMetadata;
use App\Enums\ProxyStatus;
use App\Enums\ProxyTypes;
@@ -25,10 +24,10 @@ public function run(): void
'ip' => "coolify-testing-host",
'team_id' => $root_team->id,
'private_key_id' => $private_key_1->id,
- 'proxy' => ServerMetadata::from([
- 'type' => ProxyTypes::TRAEFIK_V2->value,
- 'status' => ProxyStatus::EXITED->value
- ]),
+ // 'proxy' => ServerMetadata::from([
+ // 'type' => ProxyTypes::TRAEFIK_V2->value,
+ // 'status' => ProxyStatus::EXITED->value
+ // ]),
]);
Server::create([
'name' => "testing-local-docker-container-2",
@@ -38,4 +37,4 @@ public function run(): void
'private_key_id' => $private_key_1->id
]);
}
-}
\ No newline at end of file
+}
diff --git a/database/seeders/ServerSettingSeeder.php b/database/seeders/ServerSettingSeeder.php
index f2d8c9b49..fe366ba77 100644
--- a/database/seeders/ServerSettingSeeder.php
+++ b/database/seeders/ServerSettingSeeder.php
@@ -16,12 +16,14 @@ public function run(): void
$server_2 = Server::find(0)->load(['settings']);
$server_2->settings->wildcard_domain = 'http://127.0.0.1.sslip.io';
$server_2->settings->is_build_server = true;
+ $server_2->settings->is_usable = true;
$server_2->settings->is_reachable = true;
$server_2->settings->save();
$server_3 = Server::find(1)->load(['settings']);
$server_3->settings->is_part_of_swarm = false;
+ $server_2->settings->is_usable = false;
$server_3->settings->is_reachable = false;
$server_3->settings->save();
}
-}
\ No newline at end of file
+}
diff --git a/database/seeders/SubscriptionSeeder.php b/database/seeders/SubscriptionSeeder.php
new file mode 100644
index 000000000..e76d793a3
--- /dev/null
+++ b/database/seeders/SubscriptionSeeder.php
@@ -0,0 +1,17 @@
+save();
$normal_user_in_root_team->teams()->attach($root_user_personal_team);
-
$normal_user_not_in_root_team = User::find(2);
$normal_user_in_root_team_personal_team = Team::find(1);
$normal_user_not_in_root_team->teams()->attach($normal_user_in_root_team_personal_team, ['role' => 'admin']);
diff --git a/database/seeders/WebhookSeeder.php b/database/seeders/WebhookSeeder.php
new file mode 100644
index 000000000..f226c715a
--- /dev/null
+++ b/database/seeders/WebhookSeeder.php
@@ -0,0 +1,17 @@
+=16.9.0"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/daisyui"
- },
- "peerDependencies": {
- "postcss": "^8"
}
},
"node_modules/delayed-stream": {
diff --git a/package.json b/package.json
index 2884c7466..ed81d6a26 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
"dependencies": {
"@tailwindcss/typography": "0.5.9",
"alpinejs": "3.12.2",
- "daisyui": "3.0.3",
+ "daisyui": "3.2.1",
"tailwindcss-scrollbar": "0.1.0"
}
}
\ No newline at end of file
diff --git a/public/vendor/horizon/app.js b/public/vendor/horizon/app.js
index cf252d589..982274fa8 100644
--- a/public/vendor/horizon/app.js
+++ b/public/vendor/horizon/app.js
@@ -1,2 +1,2 @@
/*! For license information please see app.js.LICENSE.txt */
-(()=>{var t,e={30:(t,e,o)=>{"use strict";var p=Object.freeze({}),b=Array.isArray;function n(t){return null==t}function M(t){return null!=t}function z(t){return!0===t}function c(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function r(t){return"function"==typeof t}function i(t){return null!==t&&"object"==typeof t}var a=Object.prototype.toString;function O(t){return"[object Object]"===a.call(t)}function s(t){return"[object RegExp]"===a.call(t)}function l(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function d(t){return M(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function A(t){return null==t?"":Array.isArray(t)||O(t)&&t.toString===a?JSON.stringify(t,null,2):String(t)}function u(t){var e=parseFloat(t);return isNaN(e)?t:e}function f(t,e){for(var o=Object.create(null),p=t.split(","),b=0;b
0&&(Jt((p=Kt(p,"".concat(e||"","_").concat(o)))[0])&&Jt(i)&&(a[r]=ut(i.text+p[0].text),p.shift()),a.push.apply(a,p)):c(p)?Jt(i)?a[r]=ut(i.text+p):""!==p&&a.push(ut(p)):Jt(p)&&Jt(i)?a[r]=ut(i.text+p.text):(z(t._isVList)&&M(p.tag)&&n(p.key)&&M(e)&&(p.key="__vlist".concat(e,"_").concat(o,"__")),a.push(p)));return a}function Qt(t,e,o,p,n,a){return(b(o)||c(o))&&(n=p,p=o,o=void 0),z(a)&&(n=2),function(t,e,o,p,n){if(M(o)&&M(o.__ob__))return At();M(o)&&M(o.is)&&(e=o.is);if(!e)return At();0;b(p)&&r(p[0])&&((o=o||{}).scopedSlots={default:p[0]},p.length=0);2===n?p=Gt(p):1===n&&(p=function(t){for(var e=0;e 0)){var e=this.router,o=e.options.scrollBehavior,p=ca&&o;p&&this.listeners.push(Qi());var b=function(){var o=t.current,b=La(t.base);t.current===ni&&b===t._startLocation||t.transitionTo(b,(function(t){p&&Zi(e,t,o,!0)}))};window.addEventListener("popstate",b),this.listeners.push((function(){window.removeEventListener("popstate",b)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,o){var p=this,b=this.current;this.transitionTo(t,(function(t){ra(li(p.base+t.fullPath)),Zi(p.router,t,b,!1),e&&e(t)}),o)},e.prototype.replace=function(t,e,o){var p=this,b=this.current;this.transitionTo(t,(function(t){ia(li(p.base+t.fullPath)),Zi(p.router,t,b,!1),e&&e(t)}),o)},e.prototype.ensureURL=function(t){if(La(this.base)!==this.current.fullPath){var e=li(this.base+this.current.fullPath);t?ra(e):ia(e)}},e.prototype.getCurrentLocation=function(){return La(this.base)},e}(va);function La(t){var e=window.location.pathname,o=e.toLowerCase(),p=t.toLowerCase();return!t||o!==p&&0!==o.indexOf(li(p+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Xa=function(t){function e(e,o,p){t.call(this,e,o),p&&function(t){var e=La(t);if(!/^\/#/.test(e))return window.location.replace(li(t+"/#"+e)),!0}(this.base)||_a()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,o=ca&&e;o&&this.listeners.push(Qi());var p=function(){var e=t.current;_a()&&t.transitionTo(Na(),(function(p){o&&Zi(t.router,p,e,!0),ca||Ta(p.fullPath)}))},b=ca?"popstate":"hashchange";window.addEventListener(b,p),this.listeners.push((function(){window.removeEventListener(b,p)}))}},e.prototype.push=function(t,e,o){var p=this,b=this.current;this.transitionTo(t,(function(t){xa(t.fullPath),Zi(p.router,t,b,!1),e&&e(t)}),o)},e.prototype.replace=function(t,e,o){var p=this,b=this.current;this.transitionTo(t,(function(t){Ta(t.fullPath),Zi(p.router,t,b,!1),e&&e(t)}),o)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Na()!==e&&(t?xa(e):Ta(e))},e.prototype.getCurrentLocation=function(){return Na()},e}(va);function _a(){var t=Na();return"/"===t.charAt(0)||(Ta("/"+t),!1)}function Na(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function wa(t){var e=window.location.href,o=e.indexOf("#");return(o>=0?e.slice(0,o):e)+"#"+t}function xa(t){ca?ra(wa(t)):window.location.hash=t}function Ta(t){ca?ia(wa(t)):window.location.replace(wa(t))}var Ca=function(t){function e(e,o){t.call(this,e,o),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,o){var p=this;this.transitionTo(t,(function(t){p.stack=p.stack.slice(0,p.index+1).concat(t),p.index++,e&&e(t)}),o)},e.prototype.replace=function(t,e,o){var p=this;this.transitionTo(t,(function(t){p.stack=p.stack.slice(0,p.index).concat(t),e&&e(t)}),o)},e.prototype.go=function(t){var e=this,o=this.index+t;if(!(o<0||o>=this.stack.length)){var p=this.stack[o];this.confirmTransition(p,(function(){var t=e.current;e.index=o,e.updateRoute(p),e.router.afterHooks.forEach((function(e){e&&e(p,t)}))}),(function(t){ua(t,aa.duplicated)&&(e.index=o)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(va),Sa=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Hi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ca&&!1!==t.fallback,this.fallback&&(e="hash"),Pi||(e="abstract"),this.mode=e,e){case"history":this.history=new Ba(this,t.base);break;case"hash":this.history=new Xa(this,t.base,this.fallback);break;case"abstract":this.history=new Ca(this,t.base)}},ka={currentRoute:{configurable:!0}};Sa.prototype.match=function(t,e,o){return this.matcher.match(t,e,o)},ka.currentRoute.get=function(){return this.history&&this.history.current},Sa.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var o=e.apps.indexOf(t);o>-1&&e.apps.splice(o,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var o=this.history;if(o instanceof Ba||o instanceof Xa){var p=function(t){o.setupListeners(),function(t){var p=o.current,b=e.options.scrollBehavior;ca&&b&&"fullPath"in t&&Zi(e,t,p,!1)}(t)};o.transitionTo(o.getCurrentLocation(),p,p)}o.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Sa.prototype.beforeEach=function(t){return Da(this.beforeHooks,t)},Sa.prototype.beforeResolve=function(t){return Da(this.resolveHooks,t)},Sa.prototype.afterEach=function(t){return Da(this.afterHooks,t)},Sa.prototype.onReady=function(t,e){this.history.onReady(t,e)},Sa.prototype.onError=function(t){this.history.onError(t)},Sa.prototype.push=function(t,e,o){var p=this;if(!e&&!o&&"undefined"!=typeof Promise)return new Promise((function(e,o){p.history.push(t,e,o)}));this.history.push(t,e,o)},Sa.prototype.replace=function(t,e,o){var p=this;if(!e&&!o&&"undefined"!=typeof Promise)return new Promise((function(e,o){p.history.replace(t,e,o)}));this.history.replace(t,e,o)},Sa.prototype.go=function(t){this.history.go(t)},Sa.prototype.back=function(){this.go(-1)},Sa.prototype.forward=function(){this.go(1)},Sa.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Sa.prototype.resolve=function(t,e,o){var p=Ti(t,e=e||this.history.current,o,this),b=this.match(p,e),n=b.redirectedFrom||b.fullPath,M=function(t,e,o){var p="hash"===o?"#"+e:e;return t?li(t+"/"+p):p}(this.history.base,n,this.mode);return{location:p,route:b,href:M,normalizedTo:p,resolved:b}},Sa.prototype.getRoutes=function(){return this.matcher.getRoutes()},Sa.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==ni&&this.history.transitionTo(this.history.getCurrentLocation())},Sa.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==ni&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Sa.prototype,ka);var Ea=Sa;function Da(t,e){return t.push(e),function(){var o=t.indexOf(e);o>-1&&t.splice(o,1)}}Sa.install=function t(e){if(!t.installed||Ci!==e){t.installed=!0,Ci=e;var o=function(t){return void 0!==t},p=function(t,e){var p=t.$options._parentVnode;o(p)&&o(p=p.data)&&o(p=p.registerRouteInstance)&&p(t,e)};e.mixin({beforeCreate:function(){o(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,p(this,this)},destroyed:function(){p(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",ai),e.component("RouterLink",ki);var b=e.config.optionMergeStrategies;b.beforeRouteEnter=b.beforeRouteLeave=b.beforeRouteUpdate=b.created}},Sa.version="3.6.5",Sa.isNavigationFailure=ua,Sa.NavigationFailureType=aa,Sa.START_LOCATION=ni,Pi&&window.Vue&&window.Vue.use(Sa);var Pa=o(566),ja=o.n(Pa);window.Popper=o(981).default;try{window.$=window.jQuery=o(755),o(734)}catch(t){}var Ia=document.head.querySelector('meta[name="csrf-token"]');Ur.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",Ia&&(Ur.defaults.headers.common["X-CSRF-TOKEN"]=Ia.content),ep.use(Ea),ep.prototype.$http=Ur.create(),window.Horizon.basePath="/"+window.Horizon.path;var Fa=window.Horizon.basePath+"/";""!==window.Horizon.path&&"/"!==window.Horizon.path||(Fa="/",window.Horizon.basePath="");var Ha=new Ea({routes:Vr,mode:"history",base:Fa});ep.component("vue-json-pretty",ja()),ep.component("alert",o(682).Z),ep.component("scheme-toggler",o(529).Z),ep.mixin(oc),ep.directive("tooltip",(function(t,e){$(t).tooltip({title:e.value,placement:e.arg,trigger:"hover"})})),new ep({el:"#horizon",router:Ha,data:function(){return{alert:{type:null,autoClose:0,message:"",confirmationProceed:null,confirmationCancel:null},autoLoadsNewEntries:"1"===localStorage.autoLoadsNewEntries}}})},742:(t,e)=>{"use strict";e.byteLength=function(t){var e=c(t),o=e[0],p=e[1];return 3*(o+p)/4-p},e.toByteArray=function(t){var e,o,n=c(t),M=n[0],z=n[1],r=new b(function(t,e,o){return 3*(e+o)/4-o}(0,M,z)),i=0,a=z>0?M-4:M;for(o=0;o>16&255,r[i++]=e>>8&255,r[i++]=255&e;2===z&&(e=p[t.charCodeAt(o)]<<2|p[t.charCodeAt(o+1)]>>4,r[i++]=255&e);1===z&&(e=p[t.charCodeAt(o)]<<10|p[t.charCodeAt(o+1)]<<4|p[t.charCodeAt(o+2)]>>2,r[i++]=e>>8&255,r[i++]=255&e);return r},e.fromByteArray=function(t){for(var e,p=t.length,b=p%3,n=[],M=16383,z=0,c=p-b;z >18&63]+o[n>>12&63]+o[n>>6&63]+o[63&n]);return M.join("")}p["-".charCodeAt(0)]=62,p["_".charCodeAt(0)]=63},734:function(t,e,o){!function(t,e,o){"use strict";function p(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var b=p(e),n=p(o);function M(t,e){for(var o=0;o 0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=c({},e.offsets,t._config.offset(e.offsets,t._element)),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),c({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var o=b.default(this).data(Ae);if(o||(o=new t(this,"object"==typeof e?e:null),b.default(this).data(Ae,o)),"string"==typeof e){if(void 0===o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},t._clearMenus=function(e){if(!e||e.which!==Re&&("keyup"!==e.type||e.which===me))for(var o=[].slice.call(document.querySelectorAll(Ie)),p=0,n=o.length;p >8,b=o%256,n.push(b),n.push(p);return n}(e,t.length-o),t,o,p)}function R(t,e,o){return 0===e&&o===t.length?p.fromByteArray(t):p.fromByteArray(t.slice(e,o))}function y(t,e,o){o=Math.min(t.length,o);for(var p=[],b=e;b =e.length||b>=t.length);++b)e[b+o]=t[b];return b}},757:function(t,e,o){t.exports=function(t){"use strict";function e(t,e){return t(e={exports:{}},e.exports),e.exports}function o(t){return t&&t.default||t}t=t&&t.hasOwnProperty("default")?t.default:t;var p={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},b=e((function(t){var e={};for(var o in p)p.hasOwnProperty(o)&&(e[p[o]]=o);var b=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var n in b)if(b.hasOwnProperty(n)){if(!("channels"in b[n]))throw new Error("missing channels property: "+n);if(!("labels"in b[n]))throw new Error("missing channel labels property: "+n);if(b[n].labels.length!==b[n].channels)throw new Error("channel and label counts mismatch: "+n);var M=b[n].channels,z=b[n].labels;delete b[n].channels,delete b[n].labels,Object.defineProperty(b[n],"channels",{value:M}),Object.defineProperty(b[n],"labels",{value:z})}function c(t,e){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)+Math.pow(t[2]-e[2],2)}b.rgb.hsl=function(t){var e,o,p=t[0]/255,b=t[1]/255,n=t[2]/255,M=Math.min(p,b,n),z=Math.max(p,b,n),c=z-M;return z===M?e=0:p===z?e=(b-n)/c:b===z?e=2+(n-p)/c:n===z&&(e=4+(p-b)/c),(e=Math.min(60*e,360))<0&&(e+=360),o=(M+z)/2,[e,100*(z===M?0:o<=.5?c/(z+M):c/(2-z-M)),100*o]},b.rgb.hsv=function(t){var e,o,p,b,n,M=t[0]/255,z=t[1]/255,c=t[2]/255,r=Math.max(M,z,c),i=r-Math.min(M,z,c),a=function(t){return(r-t)/6/i+.5};return 0===i?b=n=0:(n=i/r,e=a(M),o=a(z),p=a(c),M===r?b=p-o:z===r?b=1/3+e-p:c===r&&(b=2/3+o-e),b<0?b+=1:b>1&&(b-=1)),[360*b,100*n,100*r]},b.rgb.hwb=function(t){var e=t[0],o=t[1],p=t[2];return[b.rgb.hsl(t)[0],1/255*Math.min(e,Math.min(o,p))*100,100*(p=1-1/255*Math.max(e,Math.max(o,p)))]},b.rgb.cmyk=function(t){var e,o=t[0]/255,p=t[1]/255,b=t[2]/255;return[100*((1-o-(e=Math.min(1-o,1-p,1-b)))/(1-e)||0),100*((1-p-e)/(1-e)||0),100*((1-b-e)/(1-e)||0),100*e]},b.rgb.keyword=function(t){var o=e[t];if(o)return o;var b,n=1/0;for(var M in p)if(p.hasOwnProperty(M)){var z=c(t,p[M]);z =0&&e<1?w(Math.round(255*e)):"")}function g(t,e){return e<1||t[3]&&t[3]<1?v(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"}function v(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function R(t,e){return e<1||t[3]&&t[3]<1?y(t,e):"rgb("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%)"}function y(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function B(t,e){return e<1||t[3]&&t[3]<1?L(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"}function L(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function X(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"}function _(t){return x[t.slice(0,3)]}function N(t,e,o){return Math.min(Math.max(e,t),o)}function w(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var x={};for(var T in l)x[l[T]]=T;var C=function(t){return t instanceof C?t:this instanceof C?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=d.getRgba(t))?this.setValues("rgb",e):(e=d.getHsla(t))?this.setValues("hsl",e):(e=d.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new C(t);var e};C.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return d.hexString(this.values.rgb)},rgbString:function(){return d.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return d.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return d.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return d.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return d.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return d.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return d.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],o=0;o p-1?null:e.getPixelForDecimal(t*b+(o?b/2:0))},getPixelForDecimal:function(t){var e=this;return e._reversePixels&&(t=1-t),e._startPixel+t*e._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this,e=t.min,o=t.max;return t.beginAtZero?0:e<0&&o<0?o:e>0&&o>0?e:0},_autoSkip:function(t){var e,o,p,b,n=this,M=n.options.ticks,z=n._length,c=M.maxTicksLimit||z/n._tickSize()+1,r=M.major.enabled?dp(t):[],i=r.length,a=r[0],O=r[i-1];if(i>c)return Ap(t,r,i/c),Op(t);if(p=lp(r,t,z,c),i>0){for(e=0,o=i-1;e b?{start:e-o,end:e}:{start:e,end:e+o}}function Jp(t){var e,o,p,b=zt.options._parseFont(t.options.pointLabels),n={l:0,r:t.width,t:0,b:t.height-t.paddingTop},M={};t.ctx.font=b.string,t._pointLabelSizes=[];var z=t.chart.data.labels.length;for(e=0;e 1?v.uniqueSort(o):o},filter:function(t){return this.pushStack(w(this,t||[],!1))},not:function(t){return this.pushStack(w(this,t||[],!0))},is:function(t){return!!w(this,"string"==typeof t&&X.test(t)?v(t):t||[],!1).length}});var x,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(v.fn.init=function(t,e,o){var p,b;if(!t)return this;if(o=o||x,"string"==typeof t){if(!(p="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:T.exec(t))||!p[1]&&e)return!e||e.jquery?(e||o).find(t):this.constructor(e).find(t);if(p[1]){if(e=e instanceof v?e[0]:e,v.merge(this,v.parseHTML(p[1],e&&e.nodeType?e.ownerDocument||e:q,!0)),N.test(p[1])&&v.isPlainObject(e))for(p in e)u(this[p])?this[p](e[p]):this.attr(p,e[p]);return this}return(b=q.getElementById(p[2]))&&(this[0]=b,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):u(t)?void 0!==o.ready?o.ready(t):t(v):v.makeArray(t,this)}).prototype=v.fn,x=v(q);var C=/^(?:parents|prev(?:Until|All))/,S={children:!0,contents:!0,next:!0,prev:!0};function k(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}v.fn.extend({has:function(t){var e=v(t,this),o=e.length;return this.filter((function(){for(var t=0;t ",""]);var mt=/<|?\w+;/;function gt(t,e,o,p,b){for(var n,M,z,c,r,i,a=e.createDocumentFragment(),O=[],s=0,l=t.length;s 1&&"string"==typeof l&&!A.checkClone&&Nt.test(l))return t.each((function(b){var n=t.eq(b);d&&(e[0]=l.call(this,b,n.html())),Et(n,e,o,p)}));if(O&&(n=(b=gt(e,t[0].ownerDocument,!1,t,p)).firstChild,1===b.childNodes.length&&(b=n),n||p)){for(z=(M=v.map(ht(b,"script"),Tt)).length;a =0&&(c+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-n-c-z-.5))||0),c}function pe(t,e,o){var p=It(t),b=(!A.boxSizingReliable()||o)&&"border-box"===v.css(t,"boxSizing",!1,p),n=b,M=Vt(t,e,p),z="offset"+e[0].toUpperCase()+e.slice(1);if(Pt.test(M)){if(!o)return M;M="auto"}return(!A.boxSizingReliable()&&b||!A.reliableTrDimensions()&&_(t,"tr")||"auto"===M||!parseFloat(M)&&"inline"===v.css(t,"display",!1,p))&&t.getClientRects().length&&(b="border-box"===v.css(t,"boxSizing",!1,p),(n=z in t)&&(M=t[z])),(M=parseFloat(M)||0)+oe(t,e,o||(b?"border":"content"),n,p,M)+"px"}function be(t,e,o,p,b){return new be.prototype.init(t,e,o,p,b)}v.extend({cssHooks:{opacity:{get:function(t,e){if(e){var o=Vt(t,"opacity");return""===o?"1":o}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,o,p){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var b,n,M,z=G(e),c=jt.test(e),r=t.style;if(c||(e=Kt(z)),M=v.cssHooks[e]||v.cssHooks[z],void 0===o)return M&&"get"in M&&void 0!==(b=M.get(t,!1,p))?b:r[e];"string"===(n=typeof o)&&(b=bt.exec(o))&&b[1]&&(o=it(t,e,b),n="number"),null!=o&&o==o&&("number"!==n||c||(o+=b&&b[3]||(v.cssNumber[z]?"":"px")),A.clearCloneStyle||""!==o||0!==e.indexOf("background")||(r[e]="inherit"),M&&"set"in M&&void 0===(o=M.set(t,o,p))||(c?r.setProperty(e,o):r[e]=o))}},css:function(t,e,o,p){var b,n,M,z=G(e);return jt.test(e)||(e=Kt(z)),(M=v.cssHooks[e]||v.cssHooks[z])&&"get"in M&&(b=M.get(t,!0,o)),void 0===b&&(b=Vt(t,e,p)),"normal"===b&&e in te&&(b=te[e]),""===o||o?(n=parseFloat(b),!0===o||isFinite(n)?n||0:b):b}}),v.each(["height","width"],(function(t,e){v.cssHooks[e]={get:function(t,o,p){if(o)return!Qt.test(v.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?pe(t,e,p):Ft(t,Zt,(function(){return pe(t,e,p)}))},set:function(t,o,p){var b,n=It(t),M=!A.scrollboxSize()&&"absolute"===n.position,z=(M||p)&&"border-box"===v.css(t,"boxSizing",!1,n),c=p?oe(t,e,p,z,n):0;return z&&M&&(c-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(n[e])-oe(t,e,"border",!1,n)-.5)),c&&(b=bt.exec(o))&&"px"!==(b[3]||"px")&&(t.style[e]=o,o=v.css(t,e)),ee(0,o,c)}}})),v.cssHooks.marginLeft=$t(A.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Vt(t,"marginLeft"))||t.getBoundingClientRect().left-Ft(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px"})),v.each({margin:"",padding:"",border:"Width"},(function(t,e){v.cssHooks[t+e]={expand:function(o){for(var p=0,b={},n="string"==typeof o?o.split(" "):[o];p<4;p++)b[t+nt[p]+e]=n[p]||n[p-2]||n[0];return b}},"margin"!==t&&(v.cssHooks[t+e].set=ee)})),v.fn.extend({css:function(t,e){return U(this,(function(t,e,o){var p,b,n={},M=0;if(Array.isArray(e)){for(p=It(t),b=e.length;M1)}}),v.Tween=be,be.prototype={constructor:be,init:function(t,e,o,p,b,n){this.elem=t,this.prop=o,this.easing=b||v.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=p,this.unit=n||(v.cssNumber[o]?"":"px")},cur:function(){var t=be.propHooks[this.prop];return t&&t.get?t.get(this):be.propHooks._default.get(this)},run:function(t){var e,o=be.propHooks[this.prop];return this.options.duration?this.pos=e=v.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),o&&o.set?o.set(this):be.propHooks._default.set(this),this}},be.prototype.init.prototype=be.prototype,be.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=v.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){v.fx.step[t.prop]?v.fx.step[t.prop](t):1!==t.elem.nodeType||!v.cssHooks[t.prop]&&null==t.elem.style[Kt(t.prop)]?t.elem[t.prop]=t.now:v.style(t.elem,t.prop,t.now+t.unit)}}},be.propHooks.scrollTop=be.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},v.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},v.fx=be.prototype.init,v.fx.step={};var ne,Me,ze=/^(?:toggle|show|hide)$/,ce=/queueHooks$/;function re(){Me&&(!1===q.hidden&&p.requestAnimationFrame?p.requestAnimationFrame(re):p.setTimeout(re,v.fx.interval),v.fx.tick())}function ie(){return p.setTimeout((function(){ne=void 0})),ne=Date.now()}function ae(t,e){var o,p=0,b={height:t};for(e=e?1:0;p<4;p+=2-e)b["margin"+(o=nt[p])]=b["padding"+o]=t;return e&&(b.opacity=b.width=t),b}function Oe(t,e,o){for(var p,b=(se.tweeners[e]||[]).concat(se.tweeners["*"]),n=0,M=b.length;np&&(p=n),p},zt.numberOfLabelLines=function(t){var e=1;return zt.each(t,(function(t){zt.isArray(t)&&t.length>e&&(e=t.length)})),e},zt.color=S?function(t){return t instanceof CanvasGradient&&(t=Q.global.defaultColor),S(t)}:function(t){return t},zt.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:zt.color(t).saturate(.5).darken(.1).rgbString()}};function Jo(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function Ko(t){this.options=t||{}}zt.extend(Ko.prototype,{formats:Jo,parse:Jo,format:Jo,add:Jo,diff:Jo,startOf:Jo,endOf:Jo,_create:function(t){return t}}),Ko.override=function(t){zt.extend(Ko.prototype,t)};var Qo={_date:Ko},Zo={formatters:{values:function(t){return zt.isArray(t)?t:""+t},linear:function(t,e,o){var p=o.length>3?o[2]-o[1]:o[1]-o[0];Math.abs(p)>1&&t!==Math.floor(t)&&(p=t-Math.floor(t));var b=zt.log10(Math.abs(p)),n="";if(0!==t)if(Math.max(Math.abs(o[0]),Math.abs(o[o.length-1]))<1e-4){var M=zt.log10(Math.abs(t)),z=Math.floor(M)-Math.floor(b);z=Math.max(Math.min(z,20),0),n=t.toExponential(z)}else{var c=-1*Math.floor(b);c=Math.max(Math.min(c,20),0),n=t.toFixed(c)}else n="0";return n},logarithmic:function(t,e,o){var p=t/Math.pow(10,Math.floor(zt.log10(t)));return 0===t?"0":1===p||2===p||5===p||0===e||e===o.length-1?t.toExponential():""}}},tp=zt.isArray,ep=zt.isNullOrUndef,op=zt.valueOrDefault,pp=zt.valueAtIndexOrDefault;function bp(t,e){for(var o=[],p=t.length/e,b=0,n=t.length;b","
"],col:[2,"
"],tr:[2,"","
"],td:[3,"
"],_default:[0,"",""]};function ht(t,e){var o;return o=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&_(t,e)?v.merge([t],o):o}function Wt(t,e){for(var o=0,p=t.length;o","
diff --git a/resources/views/components/layout-subscription.blade.php b/resources/views/components/layout-subscription.blade.php new file mode 100644 index 000000000..3feb21628 --- /dev/null +++ b/resources/views/components/layout-subscription.blade.php @@ -0,0 +1,65 @@ + + + +
+ + + + + @env('local') +
+ @endenv + @env('production') +
+ @endenv + + @vite(['resources/js/app.js', 'resources/css/app.css']) + + @livewireStyles + + +
+ +