diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php
index d2491851..cca79a9e 100644
--- a/.phpstorm.meta.php
+++ b/.phpstorm.meta.php
@@ -15,7 +15,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -225,7 +225,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -435,7 +435,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -645,7 +645,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -855,7 +855,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -1065,7 +1065,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -1275,7 +1275,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -1485,7 +1485,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -1695,7 +1695,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -1905,7 +1905,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
@@ -2115,7 +2115,7 @@
'' => '@',
'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class,
'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class,
- 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class,
+ 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class,
'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
diff --git a/app/Console/Commands/CheckAndCreateSettings.php b/app/Console/Commands/CheckAndCreateSettings.php
index 58ce75c7..bf962b40 100644
--- a/app/Console/Commands/CheckAndCreateSettings.php
+++ b/app/Console/Commands/CheckAndCreateSettings.php
@@ -46,7 +46,10 @@ public function handle(): int
protected function processSettings(string $settingsType): void
{
// Retrieve specific settings based on type
- $settingModel = Setting::{$settingsType}(); // Using dynamic method names
+ $settingModel = Setting::firstOrCreate(
+ ['name' => $settingsType],
+ ['data' => config("settings.$settingsType")]
+ ); // Using dynamic method names
$defaultSettings = config("settings.{$settingsType}");
// Calculate new keys and merge with existing data
diff --git a/app/Console/Commands/EnableLivestreams.php b/app/Console/Commands/EnableLivestreams.php
index ef81c88b..9c960df5 100644
--- a/app/Console/Commands/EnableLivestreams.php
+++ b/app/Console/Commands/EnableLivestreams.php
@@ -3,9 +3,9 @@
namespace App\Console\Commands;
use App\Enums\OpencastWorkflowState;
-use App\Models\Livestream;
use App\Models\Series;
use App\Services\OpencastService;
+use App\Services\WowzaService;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
@@ -29,7 +29,7 @@ class EnableLivestreams extends Command
/**
* Execute the console command.
*/
- public function handle(OpencastService $opencastService)
+ public function handle(OpencastService $opencastService, WowzaService $wowzaService)
{
if ($opencastService->getHealth()->get('status') === 'failed') {
$this->info('No Opencast server found or server is offline!');
@@ -56,7 +56,7 @@ public function handle(OpencastService $opencastService)
return Command::SUCCESS;
}
- $events->each(function ($event) {
+ $events->each(function ($event) use ($wowzaService) {
$series = Series::where('opencast_series_id', $event['is_part_of'])->first();
$seriesLivestreamClip = $series->fetchLivestreamClip();
@@ -65,15 +65,7 @@ public function handle(OpencastService $opencastService)
"Series '{$series->title}' has a livestream clip now try to enable"
." wowza app {$event['scheduling']['agent_id']} for this clip"
);
- $livestream = Livestream::search($event['scheduling']['agent_id'])->first();
- //livestream is matching with opencast capture agent
- if ($livestream) {
- //reserve the livestream for this clipID
- $livestream->clip_id = $seriesLivestreamClip->id;
- $livestream->time_availability_start = Carbon::now();
- $livestream->time_availability_end = Carbon::now()->addHours(2); // needs to be calculated properly
- $livestream->save();
- }
+ $wowzaService->reserveLivestreamRoom($seriesLivestreamClip, $event['scheduling']['agent_id']);
}
});
}
diff --git a/app/Http/Clients/LiveStreamingClient.php b/app/Http/Clients/LiveStreamingClient.php
new file mode 100644
index 00000000..871b570f
--- /dev/null
+++ b/app/Http/Clients/LiveStreamingClient.php
@@ -0,0 +1,9 @@
+data = $request->validated();
+ $setting->data = $this->transformStreamingSettingsData($request->validated());
$setting->save();
return to_route('settings.streaming.show');
}
+
+ private function transformStreamingSettingsData(array $settings)
+ {
+ return [
+ 'wowza' => [
+ 'server1' => [
+ 'engine_url' => $settings['wowza_server1_engine_url'],
+ 'api_url' => $settings['wowza_server1_api_url'],
+ 'api_username' => $settings['wowza_server1_api_username'],
+ 'api_password' => $settings['wowza_server1_api_password'],
+ 'content_path' => $settings['wowza_server1_content_path'],
+ 'secure_token' => $settings['wowza_server1_secure_token'],
+ 'token_prefix' => $settings['wowza_server1_token_prefix'],
+ ],
+ 'server2' => [
+ 'engine_url' => $settings['wowza_server2_engine_url'],
+ 'api_url' => $settings['wowza_server2_api_url'],
+ 'api_username' => $settings['wowza_server2_api_username'],
+ 'api_password' => $settings['wowza_server2_api_password'],
+ 'content_path' => $settings['wowza_server2_content_path'],
+ 'secure_token' => $settings['wowza_server2_secure_token'],
+ 'token_prefix' => $settings['wowza_server2_token_prefix'],
+ ],
+ ],
+ 'nginx' => [],
+ 'cdn' => [
+ 'server1' => [
+ 'url' => $settings['cdn_server1_url'],
+ 'secret' => $settings['cdn_server1_secret'],
+ ],
+
+ ],
+ ];
+ }
}
diff --git a/app/Http/Requests/UpdateStreamingSettings.php b/app/Http/Requests/UpdateStreamingSettings.php
index b46804ce..a04489bd 100644
--- a/app/Http/Requests/UpdateStreamingSettings.php
+++ b/app/Http/Requests/UpdateStreamingSettings.php
@@ -24,22 +24,22 @@ public function authorize()
public function rules()
{
return [
- 'wowza_vod_engine_url' => ['required', 'url'],
- 'wowza_vod_api_url' => ['required', 'url'],
- 'wowza_vod_username' => ['required', 'string'],
- 'wowza_vod_password' => ['required'],
- 'wowza_vod_content_path' => ['required', 'string'],
- 'wowza_vod_secure_token' => ['required', 'string'],
- 'wowza_vod_token_prefix' => ['required', 'string'],
- 'wowza_livestream_engine_url' => ['required', 'url'],
- 'wowza_livestream_api_url' => ['required', 'url'],
- 'wowza_livestream_username' => ['required', 'string'],
- 'wowza_livestream_password' => ['required'],
- 'wowza_livestream_content_path' => ['required', 'string'],
- 'wowza_livestream_secure_token' => ['required', 'string'],
- 'wowza_livestream_token_prefix' => ['required', 'string'],
- 'cdn_server_url' => ['required', 'url'],
- 'cdn_server_secret' => ['required'],
+ 'wowza_server1_engine_url' => ['required', 'url'],
+ 'wowza_server1_api_url' => ['required', 'url'],
+ 'wowza_server1_api_username' => ['required', 'string'],
+ 'wowza_server1_api_password' => ['required'],
+ 'wowza_server1_content_path' => ['required', 'string'],
+ 'wowza_server1_secure_token' => ['required', 'string'],
+ 'wowza_server1_token_prefix' => ['required', 'string'],
+ 'wowza_server2_engine_url' => ['required', 'url'],
+ 'wowza_server2_api_url' => ['required', 'url'],
+ 'wowza_server2_api_username' => ['required', 'string'],
+ 'wowza_server2_api_password' => ['required'],
+ 'wowza_server2_content_path' => ['required', 'string'],
+ 'wowza_server2_secure_token' => ['required', 'string'],
+ 'wowza_server2_token_prefix' => ['required', 'string'],
+ 'cdn_server1_url' => ['required', 'url'],
+ 'cdn_server1_secret' => ['required'],
];
}
}
diff --git a/app/Providers/LiveStreamingServiceProvider.php b/app/Providers/LiveStreamingServiceProvider.php
new file mode 100644
index 00000000..de2ba2a5
--- /dev/null
+++ b/app/Providers/LiveStreamingServiceProvider.php
@@ -0,0 +1,47 @@
+app->singleton(StreamingClient::class, function () {
+ $setting = Setting::streaming();
+
+ $settingsData = $setting->data;
+
+ $authType = config('app.env') === 'local' ? 'basic' : 'digest';
+
+ return new LiveStreamingClient([
+ 'base_uri' => $settingsData['wowza']['server2']['api_url'],
+ 'verify' => config('app.env') === 'production',
+ 'auth' => [
+ $settingsData['wowza']['server2']['api_username'],
+ $settingsData['wowza']['server2']['api_password'],
+ $authType,
+ ],
+ ]);
+ });
+ }
+
+ /**
+ * Bootstrap services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ //
+ }
+}
diff --git a/app/Providers/WowzaServiceProvider.php b/app/Providers/StreamingServiceProvider.php
similarity index 61%
rename from app/Providers/WowzaServiceProvider.php
rename to app/Providers/StreamingServiceProvider.php
index cda161fb..65bdf016 100644
--- a/app/Providers/WowzaServiceProvider.php
+++ b/app/Providers/StreamingServiceProvider.php
@@ -2,11 +2,11 @@
namespace App\Providers;
-use App\Http\Clients\WowzaClient;
+use App\Http\Clients\StreamingClient;
use App\Models\Setting;
use Illuminate\Support\ServiceProvider;
-class WowzaServiceProvider extends ServiceProvider
+class StreamingServiceProvider extends ServiceProvider
{
/**
* Register services.
@@ -15,19 +15,19 @@ class WowzaServiceProvider extends ServiceProvider
*/
public function register()
{
- $this->app->singleton(WowzaClient::class, function () {
+ $this->app->singleton(StreamingClient::class, function () {
$setting = Setting::streaming();
$settingsData = $setting->data;
$authType = config('app.env') === 'local' ? 'basic' : 'digest';
- return new WowzaClient([
- 'base_uri' => $settingsData['wowza_vod_api_url'],
+ return new StreamingClient([
+ 'base_uri' => $settingsData['wowza']['server1']['api_url'],
'verify' => config('app.env') === 'production',
'auth' => [
- $settingsData['wowza_vod_username'],
- $settingsData['wowza_vod_password'],
+ $settingsData['wowza']['server1']['api_username'],
+ $settingsData['wowza']['server1']['api_password'],
$authType,
],
]);
diff --git a/app/Services/WowzaService.php b/app/Services/WowzaService.php
index be34f0c9..d58ba89d 100644
--- a/app/Services/WowzaService.php
+++ b/app/Services/WowzaService.php
@@ -3,17 +3,21 @@
namespace App\Services;
use App\Enums\Content;
-use App\Http\Clients\WowzaClient;
+use App\Http\Clients\LiveStreamingClient;
+use App\Http\Clients\StreamingClient;
use App\Models\Clip;
+use App\Models\Livestream;
use App\Models\Setting;
use DOMException;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Psr7\Response;
+use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
+use InvalidArgumentException;
use Spatie\ArrayToXml\ArrayToXml;
class WowzaService
@@ -22,8 +26,14 @@ class WowzaService
private Setting $streamingSettings;
- public function __construct(private WowzaClient $client)
- {
+ public function __construct(
+ private StreamingClient $streamingClient,
+ private LiveStreamingClient $liveStreamingClient
+ ) {
+ $this->clients = [
+ 'stream' => $streamingClient,
+ 'livestream' => $liveStreamingClient,
+ ];
$this->response = new Response(200, []);
$this->streamingSettings = Setting::streaming();
}
@@ -31,15 +41,18 @@ public function __construct(private WowzaClient $client)
/**
* Check whether Wowza Server is online
*/
- public function getHealth(): Collection
+ public function getHealth(string $connection = 'stream'): Collection
{
+ if (! isset($this->clients[$connection])) {
+ throw new InvalidArgumentException("The connection [$connection] is not defined.");
+ }
$response = collect([
'releaseId' => 'Wowza server not available',
'status' => 'failed',
]);
try {
- $this->response = $this->client->get('/');
+ $this->response = $this->clients[$connection]->get('/');
if (! empty(json_encode((string) $this->response->getBody(), true))) {
$response->put('releaseId', json_encode((string) $this->response->getBody(), true))
->put('status', 'pass');
@@ -51,15 +64,19 @@ public function getHealth(): Collection
return $response;
}
- public function getAllApplications(): Collection
+ public function getAllApplications(string $connection = 'stream'): Collection
{
+ if (! isset($this->clients[$connection])) {
+ throw new InvalidArgumentException("The connection [$connection] is not defined.");
+ }
$response = collect([
'releaseId' => 'Wowza server not available',
'status' => 'failed',
]);
try {
- $this->response = $this->client->get('/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications');
+ $this->response = $this->clients[$connection]
+ ->get('/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications');
if (! empty((string) $this->response->getBody())) {
$response->put('applications', json_encode(simplexml_load_string((string) $this->response->getBody())));
}
@@ -205,18 +222,17 @@ public function vodSecureUrls(Clip $clip): Collection
$asset->original_file_name = 'slides.smil';
}
}
-
$url =
- $this->streamingSettings->data['wowza_vod_engine_url'].
- $this->streamingSettings->data['wowza_vod_content_path'].
+ $this->streamingSettings->data['wowza']['server1']['engine_url'].
+ $this->streamingSettings->data['wowza']['server1']['content_path'].
$asset->path.$asset->original_file_name.'/playlist.m3u8';
$wowzaContentPath =
- $this->streamingSettings->data['wowza_vod_content_path'].
+ $this->streamingSettings->data['wowza']['server1']['content_path'].
$asset->path.
$asset->original_file_name;
- $secureToken = $this->streamingSettings->data['wowza_vod_secure_token'];
- $tokenPrefix = $this->streamingSettings->data['wowza_vod_token_prefix'];
+ $secureToken = $this->streamingSettings->data['wowza']['server1']['secure_token'];
+ $tokenPrefix = $this->streamingSettings->data['wowza']['server1']['token_prefix'];
$tokenStartTime = $tokenPrefix.'starttime='.time();
$tokenEndTime = $tokenPrefix.'endTime='.(time() + 21600);
@@ -231,4 +247,19 @@ public function vodSecureUrls(Clip $clip): Collection
return $filePaths;
}
+
+ public function reserveLivestreamRoom(Clip $livestreamClip, string $opencastAgentID): Livestream
+ {
+ $livestream = Livestream::search($opencastAgentID)->first();
+ //livestream is matching with opencast capture agent
+ if ($livestream) {
+ //reserve the livestream for this clipID
+ $livestream->clip_id = $livestreamClip->id;
+ $livestream->time_availability_start = Carbon::now();
+ $livestream->time_availability_end = Carbon::now()->addHours(2); // needs to be calculated properly
+ $livestream->save();
+ }
+
+ return $livestream;
+ }
}
diff --git a/composer.json b/composer.json
index 5081e02a..6f9d879a 100644
--- a/composer.json
+++ b/composer.json
@@ -8,7 +8,7 @@
],
"license": "MIT",
"require": {
- "php": "^8.1",
+ "php": "^8.2",
"ext-dom": "*",
"ext-fileinfo": "*",
"24slides/laravel-saml2": "^2.4",
diff --git a/composer.lock b/composer.lock
index 96502a1a..9d6be636 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "b0070a87fde8dac6de8d48f84333274f",
+ "content-hash": "f31ffb761e54d43320d9f40eb3b24a21",
"packages": [
{
"name": "24slides/laravel-saml2",
@@ -1797,16 +1797,16 @@
},
{
"name": "laravel/framework",
- "version": "v11.5.0",
+ "version": "v11.7.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "e3c24268f1404805e15099b9f035fe310cb30753"
+ "reference": "e5ac72f513f635f208024aa76b8a04efc1b47f93"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/e3c24268f1404805e15099b9f035fe310cb30753",
- "reference": "e3c24268f1404805e15099b9f035fe310cb30753",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/e5ac72f513f635f208024aa76b8a04efc1b47f93",
+ "reference": "e5ac72f513f635f208024aa76b8a04efc1b47f93",
"shasum": ""
},
"require": {
@@ -1909,7 +1909,7 @@
"league/flysystem-sftp-v3": "^3.0",
"mockery/mockery": "^1.6",
"nyholm/psr7": "^1.2",
- "orchestra/testbench-core": "^9.0.6",
+ "orchestra/testbench-core": "^9.0.15",
"pda/pheanstalk": "^5.0",
"phpstan/phpstan": "^1.4.7",
"phpunit/phpunit": "^10.5|^11.0",
@@ -1998,20 +1998,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2024-04-23T15:11:31+00:00"
+ "time": "2024-05-07T13:41:51+00:00"
},
{
"name": "laravel/pint",
- "version": "v1.15.2",
+ "version": "v1.15.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "2c9f8004899815f3f0ee3cb28ef7281e2b589134"
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/2c9f8004899815f3f0ee3cb28ef7281e2b589134",
- "reference": "2c9f8004899815f3f0ee3cb28ef7281e2b589134",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
"shasum": ""
},
"require": {
@@ -2064,20 +2064,20 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2024-04-23T15:42:34+00:00"
+ "time": "2024-04-30T15:02:26+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.1.20",
+ "version": "v0.1.21",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "bf9a360c484976692de0f3792f30066f4f4b34a2"
+ "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/bf9a360c484976692de0f3792f30066f4f4b34a2",
- "reference": "bf9a360c484976692de0f3792f30066f4f4b34a2",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/23ea808e8a145653e0ab29e30d4385e49f40a920",
+ "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920",
"shasum": ""
},
"require": {
@@ -2117,11 +2117,12 @@
"license": [
"MIT"
],
+ "description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.1.20"
+ "source": "https://github.com/laravel/prompts/tree/v0.1.21"
},
- "time": "2024-04-18T00:45:25+00:00"
+ "time": "2024-04-30T12:46:16+00:00"
},
{
"name": "laravel/serializable-closure",
@@ -2644,16 +2645,16 @@
},
{
"name": "livewire/livewire",
- "version": "v3.4.11",
+ "version": "v3.4.12",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
- "reference": "8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0"
+ "reference": "54dd265c17f7b5200627eb9690590e7cbbad1027"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/livewire/zipball/8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0",
- "reference": "8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/54dd265c17f7b5200627eb9690590e7cbbad1027",
+ "reference": "54dd265c17f7b5200627eb9690590e7cbbad1027",
"shasum": ""
},
"require": {
@@ -2668,7 +2669,7 @@
},
"require-dev": {
"calebporzio/sushi": "^2.1",
- "laravel/framework": "^10.0|^11.0",
+ "laravel/framework": "^10.15.0|^11.0",
"laravel/prompts": "^0.1.6",
"mockery/mockery": "^1.3.1",
"orchestra/testbench": "^8.21.0|^9.0",
@@ -2708,7 +2709,7 @@
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
- "source": "https://github.com/livewire/livewire/tree/v3.4.11"
+ "source": "https://github.com/livewire/livewire/tree/v3.4.12"
},
"funding": [
{
@@ -2716,7 +2717,7 @@
"type": "github"
}
],
- "time": "2024-04-24T12:14:15+00:00"
+ "time": "2024-05-02T17:10:37+00:00"
},
{
"name": "mhor/php-mediainfo",
@@ -2878,16 +2879,16 @@
},
{
"name": "nesbot/carbon",
- "version": "3.3.0",
+ "version": "3.3.1",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "7219739c4e01d4680c980545821733b6ed8ee880"
+ "reference": "8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7219739c4e01d4680c980545821733b6ed8ee880",
- "reference": "7219739c4e01d4680c980545821733b6ed8ee880",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a",
+ "reference": "8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a",
"shasum": ""
},
"require": {
@@ -2980,7 +2981,7 @@
"type": "tidelift"
}
],
- "time": "2024-04-18T16:35:06+00:00"
+ "time": "2024-05-01T06:54:22+00:00"
},
{
"name": "nette/schema",
@@ -3961,20 +3962,20 @@
},
{
"name": "psr/http-factory",
- "version": "1.0.2",
+ "version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
- "reference": "e616d01114759c4c489f93b099585439f795fe35"
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
- "reference": "e616d01114759c4c489f93b099585439f795fe35",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
"shasum": ""
},
"require": {
- "php": ">=7.0.0",
+ "php": ">=7.1",
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
@@ -3998,7 +3999,7 @@
"homepage": "https://www.php-fig.org/"
}
],
- "description": "Common interfaces for PSR-7 HTTP message factories",
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
"keywords": [
"factory",
"http",
@@ -4010,9 +4011,9 @@
"response"
],
"support": {
- "source": "https://github.com/php-fig/http-factory/tree/1.0.2"
+ "source": "https://github.com/php-fig/http-factory"
},
- "time": "2023-04-10T20:10:41+00:00"
+ "time": "2024-04-15T12:06:14+00:00"
},
{
"name": "psr/http-message",
@@ -4588,16 +4589,16 @@
},
{
"name": "spatie/array-to-xml",
- "version": "3.2.3",
+ "version": "3.3.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/array-to-xml.git",
- "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab"
+ "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/c95fd4db94ec199f798d4b5b4a81757bd20d88ab",
- "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab",
+ "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876",
+ "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876",
"shasum": ""
},
"require": {
@@ -4610,6 +4611,11 @@
"spatie/pest-plugin-snapshots": "^1.1"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
"Spatie\\ArrayToXml\\": "src"
@@ -4635,7 +4641,7 @@
"xml"
],
"support": {
- "source": "https://github.com/spatie/array-to-xml/tree/3.2.3"
+ "source": "https://github.com/spatie/array-to-xml/tree/3.3.0"
},
"funding": [
{
@@ -4647,7 +4653,7 @@
"type": "github"
}
],
- "time": "2024-02-07T10:39:02+00:00"
+ "time": "2024-05-01T10:20:27+00:00"
},
{
"name": "spatie/temporary-directory",
@@ -4888,16 +4894,16 @@
},
{
"name": "symfony/cache-contracts",
- "version": "v3.4.2",
+ "version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
- "reference": "2c9db6509a1b21dad229606897639d3284f54b2a"
+ "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2c9db6509a1b21dad229606897639d3284f54b2a",
- "reference": "2c9db6509a1b21dad229606897639d3284f54b2a",
+ "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197",
+ "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197",
"shasum": ""
},
"require": {
@@ -4907,7 +4913,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.4-dev"
+ "dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -4944,7 +4950,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/cache-contracts/tree/v3.4.2"
+ "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0"
},
"funding": [
{
@@ -4960,7 +4966,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T14:51:35+00:00"
+ "time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/clock",
@@ -5196,16 +5202,16 @@
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.4.0",
+ "version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
+ "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
- "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+ "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
"shasum": ""
},
"require": {
@@ -5214,7 +5220,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.4-dev"
+ "dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -5243,7 +5249,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
},
"funding": [
{
@@ -5259,7 +5265,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-23T14:45:45+00:00"
+ "time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/error-handler",
@@ -5418,16 +5424,16 @@
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v3.4.2",
+ "version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "4e64b49bf370ade88e567de29465762e316e4224"
+ "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224",
- "reference": "4e64b49bf370ade88e567de29465762e316e4224",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50",
+ "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50",
"shasum": ""
},
"require": {
@@ -5437,7 +5443,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.4-dev"
+ "dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -5474,7 +5480,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2"
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0"
},
"funding": [
{
@@ -5490,7 +5496,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T14:51:35+00:00"
+ "time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/filesystem",
@@ -6829,21 +6835,22 @@
},
{
"name": "symfony/service-contracts",
- "version": "v3.4.2",
+ "version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "11bbf19a0fb7b36345861e85c5768844c552906e"
+ "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e",
- "reference": "11bbf19a0fb7b36345861e85c5768844c552906e",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
+ "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
"shasum": ""
},
"require": {
"php": ">=8.1",
- "psr/container": "^1.1|^2.0"
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
"ext-psr": "<1.1|>=2"
@@ -6851,7 +6858,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.4-dev"
+ "dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -6891,7 +6898,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.4.2"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.5.0"
},
"funding": [
{
@@ -6907,7 +6914,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-19T21:51:00+00:00"
+ "time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/string",
@@ -7091,16 +7098,16 @@
},
{
"name": "symfony/translation-contracts",
- "version": "v3.4.2",
+ "version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b"
+ "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b",
- "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a",
+ "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a",
"shasum": ""
},
"require": {
@@ -7109,7 +7116,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.4-dev"
+ "dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -7149,7 +7156,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2"
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0"
},
"funding": [
{
@@ -7165,7 +7172,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T14:51:35+00:00"
+ "time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/uid",
@@ -7730,16 +7737,16 @@
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
- "version": "v3.13.4",
+ "version": "v3.13.5",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "00201bcd1eaf9b1d3debddcdc13c219e4835fb61"
+ "reference": "92d86be45ee54edff735e46856f64f14b6a8bb07"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/00201bcd1eaf9b1d3debddcdc13c219e4835fb61",
- "reference": "00201bcd1eaf9b1d3debddcdc13c219e4835fb61",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/92d86be45ee54edff735e46856f64f14b6a8bb07",
+ "reference": "92d86be45ee54edff735e46856f64f14b6a8bb07",
"shasum": ""
},
"require": {
@@ -7798,7 +7805,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
- "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.13.4"
+ "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.13.5"
},
"funding": [
{
@@ -7810,7 +7817,7 @@
"type": "github"
}
],
- "time": "2024-04-10T09:15:45+00:00"
+ "time": "2024-04-12T11:20:37+00:00"
},
{
"name": "barryvdh/laravel-ide-helper",
@@ -8550,16 +8557,16 @@
},
{
"name": "larastan/larastan",
- "version": "v2.9.5",
+ "version": "v2.9.6",
"source": {
"type": "git",
"url": "https://github.com/larastan/larastan.git",
- "reference": "101f1a4470f87326f4d3995411d28679d8800abe"
+ "reference": "93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/larastan/larastan/zipball/101f1a4470f87326f4d3995411d28679d8800abe",
- "reference": "101f1a4470f87326f4d3995411d28679d8800abe",
+ "url": "https://api.github.com/repos/larastan/larastan/zipball/93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f",
+ "reference": "93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f",
"shasum": ""
},
"require": {
@@ -8628,7 +8635,7 @@
],
"support": {
"issues": "https://github.com/larastan/larastan/issues",
- "source": "https://github.com/larastan/larastan/tree/v2.9.5"
+ "source": "https://github.com/larastan/larastan/tree/v2.9.6"
},
"funding": [
{
@@ -8648,7 +8655,7 @@
"type": "patreon"
}
],
- "time": "2024-04-16T19:13:34+00:00"
+ "time": "2024-05-09T11:53:26+00:00"
},
{
"name": "laravel/breeze",
@@ -9394,16 +9401,16 @@
},
{
"name": "pestphp/pest-plugin-drift",
- "version": "v2.6.0",
+ "version": "v2.6.1",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest-plugin-drift.git",
- "reference": "8c07c1a94275f39ef62bbb622556dbf1d361d860"
+ "reference": "ed78e637a7f7b77c9b33b02ffba40555e74001ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pestphp/pest-plugin-drift/zipball/8c07c1a94275f39ef62bbb622556dbf1d361d860",
- "reference": "8c07c1a94275f39ef62bbb622556dbf1d361d860",
+ "url": "https://api.github.com/repos/pestphp/pest-plugin-drift/zipball/ed78e637a7f7b77c9b33b02ffba40555e74001ef",
+ "reference": "ed78e637a7f7b77c9b33b02ffba40555e74001ef",
"shasum": ""
},
"require": {
@@ -9444,7 +9451,7 @@
],
"support": {
"issues": "https://github.com/pestphp/pest-plugin-drift/issues",
- "source": "https://github.com/pestphp/pest-plugin-drift/tree/v2.6.0"
+ "source": "https://github.com/pestphp/pest-plugin-drift/tree/v2.6.1"
},
"funding": [
{
@@ -9460,7 +9467,7 @@
"type": "github"
}
],
- "time": "2024-03-19T19:51:17+00:00"
+ "time": "2024-05-05T07:36:43+00:00"
},
{
"name": "pestphp/pest-plugin-faker",
@@ -10050,16 +10057,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.28.0",
+ "version": "1.29.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
"shasum": ""
},
"require": {
@@ -10091,9 +10098,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.28.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
},
- "time": "2024-04-03T18:51:33+00:00"
+ "time": "2024-05-06T12:04:23+00:00"
},
{
"name": "phpstan/phpstan",
@@ -11556,16 +11563,16 @@
},
{
"name": "spatie/flare-client-php",
- "version": "1.4.4",
+ "version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/flare-client-php.git",
- "reference": "17082e780752d346c2db12ef5d6bee8e835e399c"
+ "reference": "e27977d534eefe04c154c6fd8460217024054c05"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/17082e780752d346c2db12ef5d6bee8e835e399c",
- "reference": "17082e780752d346c2db12ef5d6bee8e835e399c",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/e27977d534eefe04c154c6fd8460217024054c05",
+ "reference": "e27977d534eefe04c154c6fd8460217024054c05",
"shasum": ""
},
"require": {
@@ -11613,7 +11620,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/1.4.4"
+ "source": "https://github.com/spatie/flare-client-php/tree/1.5.1"
},
"funding": [
{
@@ -11621,20 +11628,20 @@
"type": "github"
}
],
- "time": "2024-01-31T14:18:45+00:00"
+ "time": "2024-05-03T15:43:14+00:00"
},
{
"name": "spatie/ignition",
- "version": "1.14.0",
+ "version": "1.14.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/ignition.git",
- "reference": "80385994caed328f6f9c9952926932e65b9b774c"
+ "reference": "c23cc018c5f423d2f413b99f84655fceb6549811"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/ignition/zipball/80385994caed328f6f9c9952926932e65b9b774c",
- "reference": "80385994caed328f6f9c9952926932e65b9b774c",
+ "url": "https://api.github.com/repos/spatie/ignition/zipball/c23cc018c5f423d2f413b99f84655fceb6549811",
+ "reference": "c23cc018c5f423d2f413b99f84655fceb6549811",
"shasum": ""
},
"require": {
@@ -11704,20 +11711,20 @@
"type": "github"
}
],
- "time": "2024-04-26T08:45:51+00:00"
+ "time": "2024-05-03T15:56:16+00:00"
},
{
"name": "spatie/laravel-ignition",
- "version": "2.6.0",
+ "version": "2.7.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
- "reference": "e2f8f3724371f093f9461dcd7f8c1a1bd157c27e"
+ "reference": "f52124d50122611e8a40f628cef5c19ff6cc5b57"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/e2f8f3724371f093f9461dcd7f8c1a1bd157c27e",
- "reference": "e2f8f3724371f093f9461dcd7f8c1a1bd157c27e",
+ "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/f52124d50122611e8a40f628cef5c19ff6cc5b57",
+ "reference": "f52124d50122611e8a40f628cef5c19ff6cc5b57",
"shasum": ""
},
"require": {
@@ -11726,7 +11733,7 @@
"ext-mbstring": "*",
"illuminate/support": "^10.0|^11.0",
"php": "^8.1",
- "spatie/flare-client-php": "^1.3.5",
+ "spatie/flare-client-php": "^1.5",
"spatie/ignition": "^1.14",
"symfony/console": "^6.2.3|^7.0",
"symfony/var-dumper": "^6.2.3|^7.0"
@@ -11796,7 +11803,7 @@
"type": "github"
}
],
- "time": "2024-04-29T14:55:54+00:00"
+ "time": "2024-05-02T13:42:49+00:00"
},
{
"name": "symfony/yaml",
@@ -11985,7 +11992,7 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": "^8.1",
+ "php": "^8.2",
"ext-dom": "*",
"ext-fileinfo": "*"
},
diff --git a/config/app.php b/config/app.php
index c9822cda..a3d96fd5 100644
--- a/config/app.php
+++ b/config/app.php
@@ -175,7 +175,7 @@
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\OpencastServiceProvider::class,
- App\Providers\WowzaServiceProvider::class,
+ App\Providers\StreamingServiceProvider::class,
App\Providers\OpenSearchServiceProvider::class,
],
diff --git a/config/settings.php b/config/settings.php
index 498e30bc..8eaf381f 100644
--- a/config/settings.php
+++ b/config/settings.php
@@ -40,24 +40,72 @@
'opencast_purge_end_date' => Carbon::now(),
'opencast_purge_events_per_minute' => '20',
],
+ // array:16 [▼ // app/Http/Controllers/Backend/StreamingSettingsController.php:21
+ // "wowza_vod_engine_url" => "https://stream.fau.tv/"
+ // "wowza_vod_api_url" => "http://localhost:8087"
+ // "wowza_vod_username" => "admin"
+ // "wowza_vod_password" => "wowza"
+ // "wowza_vod_content_path" => "videoportal_sec/_definst_/videoportal/"
+ // "wowza_vod_secure_token" => "emsJue5Rtv7"
+ // "wowza_vod_token_prefix" => "rrzevp"
+ // "wowza_livestream_engine_url" => "https://livestream.fau.tv/"
+ // "wowza_livestream_api_url" => "http://localhost:8087"
+ // "wowza_livestream_username" => "admin"
+ // "wowza_livestream_password" => "wowza"
+ // "wowza_livestream_content_path" => "/content/videoportal"
+ // "wowza_livestream_secure_token" => "awsTides12tvv10"
+ // "wowza_livestream_token_prefix" => "tides"
+ // "cdn_server_url" => "https://vp-cdn-balance.rrze.de/media_bu/"
+ // "cdn_server_secret" => "emsJue5Rtv7"
+ //]
'streaming' => [
- 'wowza_vod_engine_url' => 'localhost:1935',
- 'wowza_vod_api_url' => 'localhost:8087',
- 'wowza_vod_username' => 'digest_user',
- 'wowza_vod_password' => 'digest_password',
- 'wowza_vod_content_path' => '/content/videoportal',
- 'wowza_vod_secure_token' => 'awsTides12tvv10',
- 'wowza_vod_token_prefix' => 'tides',
- 'wowza_livestream_engine_url' => 'localhost:1935',
- 'wowza_livestream_api_url' => 'localhost:8087',
- 'wowza_livestream_username' => 'digest_user',
- 'wowza_livestream_password' => 'digest_password',
- 'wowza_livestream_content_path' => '/content/videoportal',
- 'wowza_livestream_secure_token' => 'awsTides12tvv10',
- 'wowza_livestream_token_prefix' => 'tides',
- 'cdn_server_url' => env('CDN_SERVER_URL', 'http://localhost/'),
- 'cdn_server_secret' => env('CDN_SERVER_SECRET', 'dsnJ23fjeq!'),
+ 'wowza' => [
+ 'server1' => [
+ 'engine_url' => 'localhost:1935',
+ 'api_url' => 'localhost:8087',
+ 'api_username' => 'digest_user',
+ 'api_password' => 'digest_password',
+ 'content_path' => '/content/videoportal',
+ 'secure_token' => 'awsTides12tvv10',
+ 'token_prefix' => 'tides',
+ ],
+ 'server2' => [
+ 'engine_url' => 'localhost:1935',
+ 'api_url' => 'localhost:8087',
+ 'api_username' => 'digest_user',
+ 'api_password' => 'digest_password',
+ 'content_path' => '/content/videoportal',
+ 'secure_token' => 'awsTides12tvv10',
+ 'token_prefix' => 'tides',
+ ],
+ ],
+ 'nginx' => [],
+ 'cdn' => [
+ 'server1' => [
+ 'url' => env('CDN_SERVER_URL', 'http://localhost/'),
+ 'secret' => env('CDN_SERVER_SECRET', 'dsnJ23fjeq!'),
+ ],
+
+ ],
],
+ // 'streaming' => [
+ // 'wowza_vod_engine_url' => 'localhost:1935',
+ // 'wowza_vod_api_url' => 'localhost:8087',
+ // 'wowza_vod_username' => 'digest_user',
+ // 'wowza_vod_password' => 'digest_password',
+ // 'wowza_vod_content_path' => '/content/videoportal',
+ // 'wowza_vod_secure_token' => 'awsTides12tvv10',
+ // 'wowza_vod_token_prefix' => 'tides',
+ // 'wowza_livestream_engine_url' => 'localhost:1935',
+ // 'wowza_livestream_api_url' => 'localhost:8087',
+ // 'wowza_livestream_username' => 'digest_user',
+ // 'wowza_livestream_password' => 'digest_password',
+ // 'wowza_livestream_content_path' => '/content/videoportal',
+ // 'wowza_livestream_secure_token' => 'awsTides12tvv10',
+ // 'wowza_livestream_token_prefix' => 'tides',
+ // 'cdn_server_url' => env('CDN_SERVER_URL', 'http://localhost/'),
+ // 'cdn_server_secret' => env('CDN_SERVER_SECRET', 'dsnJ23fjeq!'),
+ // ],
'openSearch' => [
'search_frontend_enable_open_search' => false,
'url' => 'localhost',
diff --git a/package-lock.json b/package-lock.json
index b24fd10f..f2e3b724 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -758,9 +758,9 @@
}
},
"node_modules/@types/node": {
- "version": "20.12.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz",
- "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==",
+ "version": "20.12.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz",
+ "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==",
"devOptional": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -2223,9 +2223,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001614",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz",
- "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==",
+ "version": "1.0.30001616",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz",
+ "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==",
"dev": true,
"funding": [
{
@@ -3221,9 +3221,9 @@
}
},
"node_modules/dompurify": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.1.tgz",
- "integrity": "sha512-HH391uRJXAAeelougod93W++2gECfHIVCqq+B/4znhjCgb2zVPL+iLOVnTYwejqAuNf69Ffc5ILQYdPHsZACJA=="
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.2.tgz",
+ "integrity": "sha512-5vSyvxRAb45EoWwAktUT3AYqAwXK4FL7si22Cgj46U6ICsj/YJczCN+Bk7WNABIQmpWRymGfslMhrRUZkQNnqA=="
},
"node_modules/duplexer2": {
"version": "0.1.4",
@@ -3277,9 +3277,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/electron-to-chromium": {
- "version": "1.4.751",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz",
- "integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==",
+ "version": "1.4.757",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.757.tgz",
+ "integrity": "sha512-jftDaCknYSSt/+KKeXzH3LX5E2CvRLm75P3Hj+J/dv3CL0qUYcOt13d5FN1NiL5IJbbhzHrb3BomeG2tkSlZmw==",
"dev": true
},
"node_modules/elliptic": {
@@ -5727,9 +5727,9 @@
}
},
"node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz",
+ "integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -7041,9 +7041,9 @@
}
},
"node_modules/prosemirror-model": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.20.0.tgz",
- "integrity": "sha512-q7AY7vMjKYqDCeoedgUiAgrLabliXxndJuuFmcmc2+YU1SblvnOiG2WEACF2lwAZsMlfLpiAilA3L+TWlDqIsQ==",
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.21.0.tgz",
+ "integrity": "sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==",
"dependencies": {
"orderedmap": "^2.0.0"
}
@@ -7059,11 +7059,11 @@
}
},
"node_modules/prosemirror-transform": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.8.0.tgz",
- "integrity": "sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.9.0.tgz",
+ "integrity": "sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==",
"dependencies": {
- "prosemirror-model": "^1.0.0"
+ "prosemirror-model": "^1.21.0"
}
},
"node_modules/prosemirror-view": {
@@ -10007,9 +10007,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz",
+ "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==",
"dev": true,
"funding": [
{
@@ -10026,7 +10026,7 @@
}
],
"dependencies": {
- "escalade": "^3.1.1",
+ "escalade": "^3.1.2",
"picocolors": "^1.0.0"
},
"bin": {
diff --git a/public/vendor/livewire/livewire.esm.js b/public/vendor/livewire/livewire.esm.js
index 9c91fd3a..859b555f 100644
--- a/public/vendor/livewire/livewire.esm.js
+++ b/public/vendor/livewire/livewire.esm.js
@@ -9745,7 +9745,6 @@ on("directive.init", ({ el, directive: directive2, cleanup, component }) => setT
el.addEventListener("submit", () => {
let componentId = directive2.expression.startsWith("$parent") ? component.parent.id : component.id;
let cleanup2 = disableForm(el);
- window.yo = cleanup2;
cleanups.add(componentId, cleanup2);
});
}));
diff --git a/public/vendor/livewire/livewire.js b/public/vendor/livewire/livewire.js
index 2bcadf35..f9d5268c 100644
--- a/public/vendor/livewire/livewire.js
+++ b/public/vendor/livewire/livewire.js
@@ -8878,7 +8878,6 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
el.addEventListener("submit", () => {
let componentId = directive3.expression.startsWith("$parent") ? component.parent.id : component.id;
let cleanup3 = disableForm(el);
- window.yo = cleanup3;
cleanups.add(componentId, cleanup3);
});
}));
diff --git a/public/vendor/livewire/livewire.min.js b/public/vendor/livewire/livewire.min.js
index 06d37e5f..0ba3914b 100644
--- a/public/vendor/livewire/livewire.min.js
+++ b/public/vendor/livewire/livewire.min.js
@@ -82,7 +82,7 @@ Would you like to refresh the page?`)&&window.location.reload()}function vc(e){f
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
- `;let t=oi();t&&(e.nonce=t),document.head.appendChild(e)}var Un=[],ha=["data-csrf","aria-hidden"];function jn(e,t){let r=new DOMParser().parseFromString(e,"text/html"),n=document.adoptNode(r.body),i=document.adoptNode(r.head);Un=Un.concat(Array.from(document.body.querySelectorAll("script")).map(a=>ba(wa(a.outerHTML,ha))));let o=()=>{};kf(i).finally(()=>{o()}),Tf(n,Un);let s=document.body;document.body.replaceWith(n),Alpine.destroyTree(s),t(a=>o=a)}function Tf(e,t){e.querySelectorAll("script").forEach(r=>{if(r.hasAttribute("data-navigate-once")){let n=ba(wa(r.outerHTML,ha));if(t.includes(n))return}r.replaceWith(ma(r))})}function kf(e){let t=Array.from(document.head.children),r=t.map(s=>s.outerHTML),n=document.createDocumentFragment(),i=[],o=[];for(let s of Array.from(e.children))if(pa(s)){if(r.includes(s.outerHTML))n.appendChild(s);else if(ga(s)&&Nf(s,t)&&setTimeout(()=>window.location.reload()),va(s))try{o.push(Lf(ma(s)))}catch{}else document.head.appendChild(s);i.push(s)}for(let s of Array.from(document.head.children))pa(s)||s.remove();for(let s of Array.from(e.children))document.head.appendChild(s);return Promise.all(o)}async function Lf(e){return new Promise((t,r)=>{e.src?(e.onload=()=>t(),e.onerror=()=>r()):t(),document.head.appendChild(e)})}function ma(e){let t=document.createElement("script");t.textContent=e.textContent,t.async=e.async;for(let r of e.attributes)t.setAttribute(r.name,r.value);return t}function ga(e){return e.hasAttribute("data-navigate-track")}function Nf(e,t){let[r,n]=da(e);return t.some(i=>{if(!ga(i))return!1;let[o,s]=da(i);if(o===r&&n!==s)return!0})}function da(e){return(va(e)?e.src:e.href).split("?")}function pa(e){return e.tagName.toLowerCase()==="link"&&e.getAttribute("rel").toLowerCase()==="stylesheet"||e.tagName.toLowerCase()==="style"||e.tagName.toLowerCase()==="script"}function va(e){return e.tagName.toLowerCase()==="script"}function ba(e){return e.split("").reduce((t,r)=>(t=(t<<5)-t+r.charCodeAt(0),t&t),0)}function wa(e,t){let r=e;return t.forEach(n=>{let i=new RegExp(`${n}="[^"]*"|${n}='[^']*'`,"g");r=r.replace(i,"")}),r=r.replaceAll(" ",""),r.trim()}var pr=!0,Hn=!0,Rf=!0,ya=!1;function Ea(e){e.navigate=r=>{let n=be(r);ue("alpine:navigate",{url:n,history:!1,cached:!1})||t(n)},e.navigate.disableProgressBar=()=>{Hn=!1},e.addInitSelector(()=>`[${e.prefixed("navigate")}]`),e.directive("navigate",(r,{modifiers:n})=>{n.includes("hover")&&ra(r,60,()=>{let o=On(r);kn(o,(s,a)=>{Ln(s,o,a)})}),ta(r,o=>{let s=On(r);kn(s,(a,l)=>{Ln(a,s,l)}),o(()=>{ue("alpine:navigate",{url:s,history:!1,cached:!1})||t(s)})})});function t(r,n=!0){Hn&&ua(),Pf(r,(i,o)=>{ue("alpine:navigating"),Rf&&In(),Hn&&ca(),If(),Xs(),xa(e,s=>{pr&&Fn(a=>{Nn(a)}),n?Zs(i,o):Cn(o,i),jn(i,a=>{Rn(document.body),pr&&$n((l,u)=>{Pn(l)}),Mn(),a(()=>{s(()=>{setTimeout(()=>{ya&&Sa()}),_a(e),ue("alpine:navigated")})})})})})}Qs(r=>{r(n=>{let i=be(n);if(ue("alpine:navigate",{url:i,history:!0,cached:!1}))return;t(i,!1)})},(r,n,i,o)=>{let s=be(n);ue("alpine:navigate",{url:s,history:!0,cached:!0})||(In(),ue("alpine:navigating"),Ys(i,o),xa(e,l=>{pr&&Fn(u=>{Nn(u)}),jn(r,()=>{fa(),Rn(document.body),pr&&$n((u,d)=>{Pn(u)}),Mn(),l(()=>{ya&&Sa(),_a(e),ue("alpine:navigated")})})}))}),setTimeout(()=>{ue("alpine:navigated")})}function Pf(e,t){ia(e,t,()=>{na(e,t)})}function xa(e,t){e.stopObservingMutations(),t(r=>{e.startObservingMutations(),queueMicrotask(()=>{r()})})}function ue(e,t){let r=new CustomEvent(e,{cancelable:!0,bubbles:!0,detail:t});return document.dispatchEvent(r),r.defaultPrevented}function _a(e){e.initTree(document.body,void 0,(t,r)=>{t._x_wasPersisted&&r()})}function Sa(){document.querySelector("[autofocus]")&&document.querySelector("[autofocus]").focus()}function If(){let e=function(t,r){Alpine.walk(t,(n,i)=>{sa(n)&&i(),oa(n)?i():r(n,i)})};Alpine.destroyTree(document.body,e)}function qn(e){e.magic("queryString",(t,{interceptor:r})=>{let n,i=!1,o=!1;return r((s,a,l,u,d)=>{let p=n||u,{initial:c,replace:f,push:m,pop:v}=mr(p,s,i);return l(c),o?(e.effect(()=>m(a())),v(async g=>{l(g),await(()=>Promise.resolve())()})):e.effect(()=>f(a())),c},s=>{s.alwaysShow=()=>(i=!0,s),s.usePush=()=>(o=!0,s),s.as=a=>(n=a,s)})}),e.history={track:mr}}function mr(e,t,r=!1){let{has:n,get:i,set:o,remove:s}=Ff(),a=new URL(window.location.href),l=n(a,e),u=l?i(a,e):t,d=JSON.stringify(u),p=m=>JSON.stringify(m)===d;r&&(a=o(a,e,u)),Aa(a,e,{value:u});let c=!1,f=(m,v)=>{if(c)return;let g=new URL(window.location.href);!r&&!l&&p(v)||v===void 0?g=s(g,e):g=o(g,e,v),m(g,e,{value:v})};return{initial:u,replace(m){f(Aa,m)},push(m){f(Mf,m)},pop(m){let v=g=>{!g.state||!g.state.alpine||Object.entries(g.state.alpine).forEach(([x,{value:b}])=>{if(x!==e)return;c=!0;let _=m(b);_ instanceof Promise?_.finally(()=>c=!1):c=!1})};return window.addEventListener("popstate",v),()=>window.removeEventListener("popstate",v)}}}function Aa(e,t,r){let n=window.history.state||{};n.alpine||(n.alpine={}),n.alpine[t]=Wn(r),window.history.replaceState(n,"",e.toString())}function Mf(e,t,r){let n=window.history.state||{};n.alpine||(n.alpine={}),n={alpine:{...n.alpine,[t]:Wn(r)}},window.history.pushState(n,"",e.toString())}function Wn(e){if(e!==void 0)return JSON.parse(JSON.stringify(e))}function Ff(){return{has(e,t){let r=e.search;if(!r)return!1;let n=hr(r);return Object.keys(n).includes(t)},get(e,t){let r=e.search;return r?hr(r)[t]:!1},set(e,t,r){let n=hr(e.search);return n[t]=Oa(Wn(r)),e.search=Ca(n),e},remove(e,t){let r=hr(e.search);return delete r[t],e.search=Ca(r),e}}}function Oa(e){if(!_t(e))return e;for(let t in e)e[t]===null?delete e[t]:e[t]=Oa(e[t]);return e}function Ca(e){let t=i=>typeof i=="object"&&i!==null,r=(i,o={},s="")=>(Object.entries(i).forEach(([a,l])=>{let u=s===""?a:`${s}[${a}]`;l===null?o[u]="":t(l)?o={...o,...r(l,o,u)}:o[u]=encodeURIComponent(l).replaceAll("%20","+").replaceAll("%2C",",")}),o),n=r(e);return Object.entries(n).map(([i,o])=>`${i}=${o}`).join("&")}function hr(e){if(e=e.replace("?",""),e==="")return{};let t=(i,o,s)=>{let[a,l,...u]=i.split(".");if(!l)return s[i]=o;s[a]===void 0&&(s[a]=isNaN(l)?{}:[]),t([l,...u].join("."),o,s[a])},r=e.split("&").map(i=>i.split("=")),n=Object.create(null);return r.forEach(([i,o])=>{if(!(typeof o>"u"))if(o=decodeURIComponent(o.replaceAll("+","%20")),!i.includes("["))n[i]=o;else{let s=i.replaceAll("[",".").replaceAll("]","");t(s,o,n)}}),n}function zn(e,t,r){Bf();let n,i,o,s,a,l,u,d,p,c;function f(h={}){let y=L=>L.getAttribute("key"),C=()=>{};a=h.updating||C,l=h.updated||C,u=h.removing||C,d=h.removed||C,p=h.adding||C,c=h.added||C,o=h.key||y,s=h.lookahead||!1}function m(h,y){if(v(h,y))return g(h,y);let C=!1;if(!Ge(a,h,y,()=>C=!0)){if(h.nodeType===1&&window.Alpine&&(window.Alpine.cloneNode(h,y),h._x_teleport&&y._x_teleport&&m(h._x_teleport,y._x_teleport)),Df(y)){x(h,y),l(h,y);return}C||b(h,y),l(h,y),_(h,y)}}function v(h,y){return h.nodeType!=y.nodeType||h.nodeName!=y.nodeName||T(h)!=T(y)}function g(h,y){if(Ge(u,h))return;let C=y.cloneNode(!0);Ge(p,C)||(h.replaceWith(C),d(h),c(C))}function x(h,y){let C=y.nodeValue;h.nodeValue!==C&&(h.nodeValue=C)}function b(h,y){if(h._x_transitioning||h._x_isShown&&!y._x_isShown||!h._x_isShown&&y._x_isShown)return;let C=Array.from(h.attributes),L=Array.from(y.attributes);for(let A=C.length-1;A>=0;A--){let E=C[A].name;y.hasAttribute(E)||h.removeAttribute(E)}for(let A=L.length-1;A>=0;A--){let E=L[A].name,U=L[A].value;h.getAttribute(E)!==U&&h.setAttribute(E,U)}}function _(h,y){let C=O(h.children),L={},A=ka(y),E=ka(h);for(;A;){Uf(A,E);let P=T(A),D=T(E);if(!E)if(P&&L[P]){let N=L[P];h.appendChild(N),E=N}else{if(!Ge(p,A)){let N=A.cloneNode(!0);h.appendChild(N),c(N)}A=X(y,A);continue}let q=N=>N&&N.nodeType===8&&N.textContent==="[if BLOCK]>N&&N.nodeType===8&&N.textContent==="[if ENDBLOCK]>0)N--;else if(H(Y)&&N===0){E=Y;break}E=Y}let Ja=E;N=0;let Ga=A;for(;A;){let Y=X(y,A);if(q(Y))N++;else if(H(Y)&&N>0)N--;else if(H(Y)&&N===0){A=Y;break}A=Y}let Xa=A,Ya=new Kn(bt,Ja),Qa=new Kn(Ga,Xa);_(Ya,Qa);continue}if(E.nodeType===1&&s&&!E.isEqualNode(A)){let N=X(y,A),bt=!1;for(;!bt&&N;)N.nodeType===1&&E.isEqualNode(N)&&(bt=!0,E=w(h,A,E),D=T(E)),N=X(y,N)}if(P!==D){if(!P&&D){L[D]=E,E=w(h,A,E),L[D].remove(),E=X(h,E),A=X(y,A);continue}if(P&&!D&&C[P]&&(E.replaceWith(C[P]),E=C[P]),P&&D){let N=C[P];if(N)L[D]=E,E.replaceWith(N),E=N;else{L[D]=E,E=w(h,A,E),L[D].remove(),E=X(h,E),A=X(y,A);continue}}}let we=E&&X(h,E);m(E,A),A=A&&X(y,A),E=we}let U=[];for(;E;)Ge(u,E)||U.push(E),E=X(h,E);for(;U.length;){let P=U.shift();P.remove(),d(P)}}function T(h){return h&&h.nodeType===1&&o(h)}function O(h){let y={};for(let C of h){let L=T(C);L&&(y[L]=C)}return y}function w(h,y,C){if(!Ge(p,y)){let L=y.cloneNode(!0);return h.insertBefore(L,C),c(L),L}return y}return f(r),n=e,i=typeof t=="string"?$f(t):t,window.Alpine&&window.Alpine.closestDataStack&&!e._x_dataStack&&(i._x_dataStack=window.Alpine.closestDataStack(e),i._x_dataStack&&window.Alpine.cloneNode(e,i)),m(e,i),n=void 0,i=void 0,e}zn.step=()=>{};zn.log=()=>{};function Ge(e,...t){let r=!1;return e(...t,()=>r=!0),r}var Ta=!1;function $f(e){let t=document.createElement("template");return t.innerHTML=e,t.content.firstElementChild}function Df(e){return e.nodeType===3||e.nodeType===8}var Kn=class{constructor(e,t){this.startComment=e,this.endComment=t}get children(){let e=[],t=this.startComment.nextSibling;for(;t&&t!==this.endComment;)e.push(t),t=t.nextSibling;return e}appendChild(e){this.endComment.before(e)}get firstChild(){let e=this.startComment.nextSibling;if(e!==this.endComment)return e}nextNode(e){let t=e.nextSibling;if(t!==this.endComment)return t}insertBefore(e,t){return t.before(e),e}};function ka(e){return e.firstChild}function X(e,t){let r;return e instanceof Kn?r=e.nextNode(t):r=t.nextSibling,r}function Bf(){if(Ta)return;Ta=!0;let e=Element.prototype.setAttribute,t=document.createElement("div");Element.prototype.setAttribute=function(n,i){if(!n.includes("@"))return e.call(this,n,i);t.innerHTML=``;let o=t.firstElementChild.getAttributeNode(n);t.firstElementChild.removeAttributeNode(o),this.setAttributeNode(o)}}function Uf(e,t){let r=t&&t._x_bindings&&t._x_bindings.id;!r||(e.setAttribute("id",r),e.id=r)}function jf(e){e.morph=zn}var La=jf;function Hf(e){e.directive("mask",(t,{value:r,expression:n},{effect:i,evaluateLater:o,cleanup:s})=>{let a=()=>n,l="";queueMicrotask(()=>{if(["function","dynamic"].includes(r)){let c=o(n);i(()=>{a=f=>{let m;return e.dontAutoEvaluateFunctions(()=>{c(v=>{m=typeof v=="function"?v(f):v},{scope:{$input:f,$money:Wf.bind({el:t})}})}),m},d(t,!1)})}else d(t,!1);t._x_model&&t._x_model.set(t.value)});let u=new AbortController;s(()=>{u.abort()}),t.addEventListener("input",()=>d(t),{signal:u.signal,capture:!0}),t.addEventListener("blur",()=>d(t,!1),{signal:u.signal});function d(c,f=!0){let m=c.value,v=a(m);if(!v||v==="false")return!1;if(l.length-c.value.length===1)return l=c.value;let g=()=>{l=c.value=p(m,v)};f?qf(c,v,()=>{g()}):g()}function p(c,f){if(c==="")return"";let m=Na(f,c);return Ra(f,m)}}).before("model")}function qf(e,t,r){let n=e.selectionStart,i=e.value;r();let o=i.slice(0,n),s=Ra(t,Na(t,o)).length;e.setSelectionRange(s,s)}function Na(e,t){let r=t,n="",i={9:/[0-9]/,a:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},o="";for(let s=0;s{let d="",p=0;for(let c=l.length-1;c>=0;c--)l[c]!==u&&(p===3?(d=l[c]+u+d,p=0):d=l[c]+d,p++);return d},o=e.startsWith("-")?"-":"",s=e.replaceAll(new RegExp(`[^0-9\\${t}]`,"g"),""),a=Array.from({length:s.split(t)[0].length}).fill("9").join("");return a=`${o}${i(a,r)}`,n>0&&e.includes(t)&&(a+=`${t}`+"9".repeat(n)),queueMicrotask(()=>{this.el.value.endsWith(t)||this.el.value[this.el.selectionStart-1]===t&&this.el.setSelectionRange(this.el.selectionStart-1,this.el.selectionStart-1)}),a}var Pa=Hf;function Ia(){setTimeout(()=>Kf()),yt(document,"livewire:init"),yt(document,"livewire:initializing"),S.plugin(La),S.plugin(qn),S.plugin(Ls),S.plugin(us),S.plugin(Gs),S.plugin(As),S.plugin(ks),S.plugin(Ea),S.plugin(Pa),S.addRootSelector(()=>"[wire\\:id]"),S.onAttributesAdded((e,t)=>{if(!Array.from(t).some(n=>We(n.name)))return;let r=K(e,!1);!r||t.forEach(n=>{if(!We(n.name))return;let i=Yt(e,n.name);R("directive.init",{el:e,component:r,directive:i,cleanup:o=>{S.onAttributeRemoved(e,i.raw,o)}})})}),S.interceptInit(S.skipDuringClone(e=>{if(!Array.from(e.attributes).some(r=>We(r.name)))return;if(e.hasAttribute("wire:id")){let r=Zo(e);S.onAttributeRemoved(e,"wire:id",()=>{es(r.id)})}let t=K(e,!1);t&&(R("element.init",{el:e,component:t}),Array.from(e.getAttributeNames()).filter(n=>We(n)).map(n=>Yt(e,n)).forEach(n=>{R("directive.init",{el:e,component:t,directive:n,cleanup:i=>{S.onAttributeRemoved(e,n.raw,i)}})}))})),S.start(),setTimeout(()=>window.Livewire.initialRenderIsFinished=!0),yt(document,"livewire:initialized")}function Kf(){let e=document.querySelector("script[data-update-uri][data-csrf]");if(!e)return;let t=e.closest("[wire\\:id]");t&&console.warn("Livewire: missing closing tags found. Ensure your template elements contain matching closing tags.",t)}k("effect",({component:e,effects:t})=>{zf(e,t.listeners||[])});function zf(e,t){t.forEach(r=>{let n=i=>{i.__livewire&&i.__livewire.receivedBy.push(e),e.$wire.call("__dispatch",r,i.detail||{})};window.addEventListener(r,n),e.addCleanup(()=>window.removeEventListener(r,n)),e.el.addEventListener(r,i=>{!i.__livewire||i.bubbles||(i.__livewire&&i.__livewire.receivedBy.push(e.id),e.$wire.call("__dispatch",r,i.detail||{}))})})}var Xe=new WeakMap,gr=new Set;k("payload.intercept",async({assets:e})=>{if(!!e)for(let[t,r]of Object.entries(e))await Gf(t,async()=>{await Xf(r)})});k("component.init",({component:e})=>{let t=e.snapshot.memo.assets;t&&t.forEach(r=>{gr.has(r)||gr.add(r)})});k("effect",({component:e,effects:t})=>{let r=t.scripts;r&&Object.entries(r).forEach(([n,i])=>{Vf(e,n,()=>{let o=Jf(i);S.dontAutoEvaluateFunctions(()=>{S.evaluate(e.el,o,{$wire:e.$wire})})})})});function Vf(e,t,r){if(Xe.has(e)&&Xe.get(e).includes(t))return;r(),Xe.has(e)||Xe.set(e,[]);let n=Xe.get(e);n.push(t),Xe.set(e,n)}function Jf(e){let r=/