From d161bc333255a93fa8b60d7d0be761c4dfae9c1b Mon Sep 17 00:00:00 2001 From: Marco Szulik Date: Mon, 17 Feb 2025 12:24:10 +0100 Subject: [PATCH] de-duplicate code in a more comprehensible way --- .phpstorm.meta.php | 325 ++++++++++-------- _ide_helper.php | 74 +++- .../Delivery.php} | 8 +- app/Classes/MediaHandler/ImageHandler.php | 14 +- app/Classes/MediaHandler/MediaHandler.php | 46 +++ app/Classes/MediaHandler/PdfHandler.php | 14 +- ...ediaHandler.php => StaticMediaHandler.php} | 11 +- app/Classes/MediaHandler/VideoHandler.php | 22 +- app/Classes/Optimizer/Optimize.php | 10 +- app/Facades/DeliveryFacade.php | 18 + app/Facades/OptimizeFacade.php | 18 + app/Http/Controllers/V1/ImageController.php | 6 +- app/Http/Controllers/V1/PdfController.php | 6 +- app/Providers/AppServiceProvider.php | 7 +- config/app.php | 2 + 15 files changed, 370 insertions(+), 211 deletions(-) rename app/{Helpers/DeliveryHelper.php => Classes/Delivery.php} (88%) create mode 100644 app/Classes/MediaHandler/MediaHandler.php rename app/Classes/MediaHandler/{AbstractMediaHandler.php => StaticMediaHandler.php} (90%) create mode 100644 app/Facades/DeliveryFacade.php create mode 100644 app/Facades/OptimizeFacade.php diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php index 0fff851..83c7d30 100644 --- a/.phpstorm.meta.php +++ b/.phpstorm.meta.php @@ -47,6 +47,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -65,6 +66,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -123,6 +125,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -141,6 +144,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -199,6 +203,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -217,6 +222,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -275,6 +281,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -293,6 +300,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -351,6 +359,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -369,6 +378,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -427,6 +437,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -445,6 +456,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -503,6 +515,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -521,6 +534,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -579,6 +593,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -597,6 +612,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -655,6 +671,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -673,6 +690,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -731,6 +749,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -749,6 +768,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -807,6 +827,7 @@ 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, 'db.schema' => \Illuminate\Database\Schema\MySqlBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, + 'delivery' => \App\Classes\Delivery::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, 'files' => \Illuminate\Filesystem\Filesystem::class, @@ -825,6 +846,7 @@ 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, + 'optimize' => \App\Classes\Optimizer\Optimize::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'protector' => \Cybex\Protector\Protector::class, 'queue' => \Illuminate\Queue\QueueManager::class, @@ -930,6 +952,8 @@ 'app.aliases.View' => 'string', 'app.aliases.Vite' => 'string', 'app.aliases.CdnHelper' => 'string', + 'app.aliases.Delivery' => 'string', + 'app.aliases.Optimize' => 'string', 'app.aliases.Transcode' => 'string', 'app.aliases.Transform' => 'string', 'auth.defaults.guard' => 'string', @@ -994,7 +1018,7 @@ 'cache.stores.redis.lock_connection' => 'string', 'cache.stores.dynamodb.driver' => 'string', 'cache.stores.dynamodb.key' => 'string', - 'cache.stores.dynamodb.secret' => 'NULL', + 'cache.stores.dynamodb.secret' => 'string', 'cache.stores.dynamodb.region' => 'string', 'cache.stores.dynamodb.table' => 'string', 'cache.stores.dynamodb.endpoint' => 'NULL', @@ -1104,7 +1128,7 @@ 'filesystems.disks.public.throw' => 'boolean', 'filesystems.disks.s3.driver' => 'string', 'filesystems.disks.s3.key' => 'string', - 'filesystems.disks.s3.secret' => 'NULL', + 'filesystems.disks.s3.secret' => 'string', 'filesystems.disks.s3.region' => 'string', 'filesystems.disks.s3.bucket' => 'NULL', 'filesystems.disks.s3.url' => 'NULL', @@ -1129,7 +1153,7 @@ 'filesystems.disks.s3Originals.driver' => 'string', 'filesystems.disks.s3Originals.root' => 'string', 'filesystems.disks.s3Originals.key' => 'string', - 'filesystems.disks.s3Originals.secret' => 'NULL', + 'filesystems.disks.s3Originals.secret' => 'string', 'filesystems.disks.s3Originals.region' => 'string', 'filesystems.disks.s3Originals.bucket' => 'string', 'filesystems.disks.s3Originals.url' => 'NULL', @@ -1139,7 +1163,7 @@ 'filesystems.disks.s3ImageDerivatives.driver' => 'string', 'filesystems.disks.s3ImageDerivatives.root' => 'string', 'filesystems.disks.s3ImageDerivatives.key' => 'string', - 'filesystems.disks.s3ImageDerivatives.secret' => 'NULL', + 'filesystems.disks.s3ImageDerivatives.secret' => 'string', 'filesystems.disks.s3ImageDerivatives.region' => 'string', 'filesystems.disks.s3ImageDerivatives.bucket' => 'string', 'filesystems.disks.s3ImageDerivatives.url' => 'NULL', @@ -1149,7 +1173,7 @@ 'filesystems.disks.s3PdfDerivatives.driver' => 'string', 'filesystems.disks.s3PdfDerivatives.root' => 'string', 'filesystems.disks.s3PdfDerivatives.key' => 'string', - 'filesystems.disks.s3PdfDerivatives.secret' => 'NULL', + 'filesystems.disks.s3PdfDerivatives.secret' => 'string', 'filesystems.disks.s3PdfDerivatives.region' => 'string', 'filesystems.disks.s3PdfDerivatives.bucket' => 'string', 'filesystems.disks.s3PdfDerivatives.url' => 'NULL', @@ -1159,7 +1183,7 @@ 'filesystems.disks.s3VideoDerivatives.driver' => 'string', 'filesystems.disks.s3VideoDerivatives.root' => 'string', 'filesystems.disks.s3VideoDerivatives.key' => 'string', - 'filesystems.disks.s3VideoDerivatives.secret' => 'NULL', + 'filesystems.disks.s3VideoDerivatives.secret' => 'string', 'filesystems.disks.s3VideoDerivatives.region' => 'string', 'filesystems.disks.s3VideoDerivatives.bucket' => 'string', 'filesystems.disks.s3VideoDerivatives.url' => 'NULL', @@ -1239,8 +1263,8 @@ 'mail.mailers.smtp.host' => 'string', 'mail.mailers.smtp.port' => 'string', 'mail.mailers.smtp.encryption' => 'NULL', - 'mail.mailers.smtp.username' => 'string', - 'mail.mailers.smtp.password' => 'string', + 'mail.mailers.smtp.username' => 'NULL', + 'mail.mailers.smtp.password' => 'NULL', 'mail.mailers.smtp.timeout' => 'NULL', 'mail.mailers.smtp.local_domain' => 'NULL', 'mail.mailers.ses.transport' => 'string', @@ -1263,7 +1287,7 @@ 'protector.fileName' => 'string', 'protector.maxPacketLength' => 'string', 'protector.baseDirectory' => 'string', - 'protector.remoteEndpoint.serverUrl' => 'string', + 'protector.remoteEndpoint.serverUrl' => 'NULL', 'protector.remoteEndpoint.htaccessLogin' => 'string', 'protector.dumpEndpointRoute' => 'string', 'protector.routeMiddleware' => 'string', @@ -1285,7 +1309,7 @@ 'queue.connections.beanstalkd.after_commit' => 'boolean', 'queue.connections.sqs.driver' => 'string', 'queue.connections.sqs.key' => 'string', - 'queue.connections.sqs.secret' => 'NULL', + 'queue.connections.sqs.secret' => 'string', 'queue.connections.sqs.prefix' => 'string', 'queue.connections.sqs.queue' => 'string', 'queue.connections.sqs.suffix' => 'NULL', @@ -1299,7 +1323,7 @@ 'queue.connections.redis.after_commit' => 'boolean', 'queue.connections.sqs-fifo.driver' => 'string', 'queue.connections.sqs-fifo.key' => 'string', - 'queue.connections.sqs-fifo.secret' => 'NULL', + 'queue.connections.sqs-fifo.secret' => 'string', 'queue.connections.sqs-fifo.prefix' => 'string', 'queue.connections.sqs-fifo.queue' => 'string', 'queue.connections.sqs-fifo.suffix' => 'NULL', @@ -1319,7 +1343,7 @@ 'sanctum.middleware.validate_csrf_token' => 'string', 'services.postmark.token' => 'NULL', 'services.ses.key' => 'string', - 'services.ses.secret' => 'NULL', + 'services.ses.secret' => 'string', 'services.ses.region' => 'string', 'services.resend.key' => 'NULL', 'services.slack.notifications.bot_user_oauth_token' => 'NULL', @@ -1362,7 +1386,7 @@ 'transmorpher.additional_transcoding_parameters' => 'string', 'transmorpher.cdn_helper' => 'string', 'transmorpher.aws.key' => 'string', - 'transmorpher.aws.secret' => 'NULL', + 'transmorpher.aws.secret' => 'string', 'transmorpher.aws.region' => 'string', 'transmorpher.aws.cloudfront_distribution_id' => 'string', 'transmorpher.signing_keypair' => 'string', @@ -1493,6 +1517,8 @@ 'app.aliases.View' => 'string', 'app.aliases.Vite' => 'string', 'app.aliases.CdnHelper' => 'string', + 'app.aliases.Delivery' => 'string', + 'app.aliases.Optimize' => 'string', 'app.aliases.Transcode' => 'string', 'app.aliases.Transform' => 'string', 'auth.defaults.guard' => 'string', @@ -1557,7 +1583,7 @@ 'cache.stores.redis.lock_connection' => 'string', 'cache.stores.dynamodb.driver' => 'string', 'cache.stores.dynamodb.key' => 'string', - 'cache.stores.dynamodb.secret' => 'NULL', + 'cache.stores.dynamodb.secret' => 'string', 'cache.stores.dynamodb.region' => 'string', 'cache.stores.dynamodb.table' => 'string', 'cache.stores.dynamodb.endpoint' => 'NULL', @@ -1667,7 +1693,7 @@ 'filesystems.disks.public.throw' => 'boolean', 'filesystems.disks.s3.driver' => 'string', 'filesystems.disks.s3.key' => 'string', - 'filesystems.disks.s3.secret' => 'NULL', + 'filesystems.disks.s3.secret' => 'string', 'filesystems.disks.s3.region' => 'string', 'filesystems.disks.s3.bucket' => 'NULL', 'filesystems.disks.s3.url' => 'NULL', @@ -1692,7 +1718,7 @@ 'filesystems.disks.s3Originals.driver' => 'string', 'filesystems.disks.s3Originals.root' => 'string', 'filesystems.disks.s3Originals.key' => 'string', - 'filesystems.disks.s3Originals.secret' => 'NULL', + 'filesystems.disks.s3Originals.secret' => 'string', 'filesystems.disks.s3Originals.region' => 'string', 'filesystems.disks.s3Originals.bucket' => 'string', 'filesystems.disks.s3Originals.url' => 'NULL', @@ -1702,7 +1728,7 @@ 'filesystems.disks.s3ImageDerivatives.driver' => 'string', 'filesystems.disks.s3ImageDerivatives.root' => 'string', 'filesystems.disks.s3ImageDerivatives.key' => 'string', - 'filesystems.disks.s3ImageDerivatives.secret' => 'NULL', + 'filesystems.disks.s3ImageDerivatives.secret' => 'string', 'filesystems.disks.s3ImageDerivatives.region' => 'string', 'filesystems.disks.s3ImageDerivatives.bucket' => 'string', 'filesystems.disks.s3ImageDerivatives.url' => 'NULL', @@ -1712,7 +1738,7 @@ 'filesystems.disks.s3PdfDerivatives.driver' => 'string', 'filesystems.disks.s3PdfDerivatives.root' => 'string', 'filesystems.disks.s3PdfDerivatives.key' => 'string', - 'filesystems.disks.s3PdfDerivatives.secret' => 'NULL', + 'filesystems.disks.s3PdfDerivatives.secret' => 'string', 'filesystems.disks.s3PdfDerivatives.region' => 'string', 'filesystems.disks.s3PdfDerivatives.bucket' => 'string', 'filesystems.disks.s3PdfDerivatives.url' => 'NULL', @@ -1722,7 +1748,7 @@ 'filesystems.disks.s3VideoDerivatives.driver' => 'string', 'filesystems.disks.s3VideoDerivatives.root' => 'string', 'filesystems.disks.s3VideoDerivatives.key' => 'string', - 'filesystems.disks.s3VideoDerivatives.secret' => 'NULL', + 'filesystems.disks.s3VideoDerivatives.secret' => 'string', 'filesystems.disks.s3VideoDerivatives.region' => 'string', 'filesystems.disks.s3VideoDerivatives.bucket' => 'string', 'filesystems.disks.s3VideoDerivatives.url' => 'NULL', @@ -1802,8 +1828,8 @@ 'mail.mailers.smtp.host' => 'string', 'mail.mailers.smtp.port' => 'string', 'mail.mailers.smtp.encryption' => 'NULL', - 'mail.mailers.smtp.username' => 'string', - 'mail.mailers.smtp.password' => 'string', + 'mail.mailers.smtp.username' => 'NULL', + 'mail.mailers.smtp.password' => 'NULL', 'mail.mailers.smtp.timeout' => 'NULL', 'mail.mailers.smtp.local_domain' => 'NULL', 'mail.mailers.ses.transport' => 'string', @@ -1826,7 +1852,7 @@ 'protector.fileName' => 'string', 'protector.maxPacketLength' => 'string', 'protector.baseDirectory' => 'string', - 'protector.remoteEndpoint.serverUrl' => 'string', + 'protector.remoteEndpoint.serverUrl' => 'NULL', 'protector.remoteEndpoint.htaccessLogin' => 'string', 'protector.dumpEndpointRoute' => 'string', 'protector.routeMiddleware' => 'string', @@ -1848,7 +1874,7 @@ 'queue.connections.beanstalkd.after_commit' => 'boolean', 'queue.connections.sqs.driver' => 'string', 'queue.connections.sqs.key' => 'string', - 'queue.connections.sqs.secret' => 'NULL', + 'queue.connections.sqs.secret' => 'string', 'queue.connections.sqs.prefix' => 'string', 'queue.connections.sqs.queue' => 'string', 'queue.connections.sqs.suffix' => 'NULL', @@ -1862,7 +1888,7 @@ 'queue.connections.redis.after_commit' => 'boolean', 'queue.connections.sqs-fifo.driver' => 'string', 'queue.connections.sqs-fifo.key' => 'string', - 'queue.connections.sqs-fifo.secret' => 'NULL', + 'queue.connections.sqs-fifo.secret' => 'string', 'queue.connections.sqs-fifo.prefix' => 'string', 'queue.connections.sqs-fifo.queue' => 'string', 'queue.connections.sqs-fifo.suffix' => 'NULL', @@ -1882,7 +1908,7 @@ 'sanctum.middleware.validate_csrf_token' => 'string', 'services.postmark.token' => 'NULL', 'services.ses.key' => 'string', - 'services.ses.secret' => 'NULL', + 'services.ses.secret' => 'string', 'services.ses.region' => 'string', 'services.resend.key' => 'NULL', 'services.slack.notifications.bot_user_oauth_token' => 'NULL', @@ -1925,7 +1951,7 @@ 'transmorpher.additional_transcoding_parameters' => 'string', 'transmorpher.cdn_helper' => 'string', 'transmorpher.aws.key' => 'string', - 'transmorpher.aws.secret' => 'NULL', + 'transmorpher.aws.secret' => 'string', 'transmorpher.aws.region' => 'string', 'transmorpher.aws.cloudfront_distribution_id' => 'string', 'transmorpher.signing_keypair' => 'string', @@ -2056,6 +2082,8 @@ 'app.aliases.View' => 'string', 'app.aliases.Vite' => 'string', 'app.aliases.CdnHelper' => 'string', + 'app.aliases.Delivery' => 'string', + 'app.aliases.Optimize' => 'string', 'app.aliases.Transcode' => 'string', 'app.aliases.Transform' => 'string', 'auth.defaults.guard' => 'string', @@ -2120,7 +2148,7 @@ 'cache.stores.redis.lock_connection' => 'string', 'cache.stores.dynamodb.driver' => 'string', 'cache.stores.dynamodb.key' => 'string', - 'cache.stores.dynamodb.secret' => 'NULL', + 'cache.stores.dynamodb.secret' => 'string', 'cache.stores.dynamodb.region' => 'string', 'cache.stores.dynamodb.table' => 'string', 'cache.stores.dynamodb.endpoint' => 'NULL', @@ -2230,7 +2258,7 @@ 'filesystems.disks.public.throw' => 'boolean', 'filesystems.disks.s3.driver' => 'string', 'filesystems.disks.s3.key' => 'string', - 'filesystems.disks.s3.secret' => 'NULL', + 'filesystems.disks.s3.secret' => 'string', 'filesystems.disks.s3.region' => 'string', 'filesystems.disks.s3.bucket' => 'NULL', 'filesystems.disks.s3.url' => 'NULL', @@ -2255,7 +2283,7 @@ 'filesystems.disks.s3Originals.driver' => 'string', 'filesystems.disks.s3Originals.root' => 'string', 'filesystems.disks.s3Originals.key' => 'string', - 'filesystems.disks.s3Originals.secret' => 'NULL', + 'filesystems.disks.s3Originals.secret' => 'string', 'filesystems.disks.s3Originals.region' => 'string', 'filesystems.disks.s3Originals.bucket' => 'string', 'filesystems.disks.s3Originals.url' => 'NULL', @@ -2265,7 +2293,7 @@ 'filesystems.disks.s3ImageDerivatives.driver' => 'string', 'filesystems.disks.s3ImageDerivatives.root' => 'string', 'filesystems.disks.s3ImageDerivatives.key' => 'string', - 'filesystems.disks.s3ImageDerivatives.secret' => 'NULL', + 'filesystems.disks.s3ImageDerivatives.secret' => 'string', 'filesystems.disks.s3ImageDerivatives.region' => 'string', 'filesystems.disks.s3ImageDerivatives.bucket' => 'string', 'filesystems.disks.s3ImageDerivatives.url' => 'NULL', @@ -2275,7 +2303,7 @@ 'filesystems.disks.s3PdfDerivatives.driver' => 'string', 'filesystems.disks.s3PdfDerivatives.root' => 'string', 'filesystems.disks.s3PdfDerivatives.key' => 'string', - 'filesystems.disks.s3PdfDerivatives.secret' => 'NULL', + 'filesystems.disks.s3PdfDerivatives.secret' => 'string', 'filesystems.disks.s3PdfDerivatives.region' => 'string', 'filesystems.disks.s3PdfDerivatives.bucket' => 'string', 'filesystems.disks.s3PdfDerivatives.url' => 'NULL', @@ -2285,7 +2313,7 @@ 'filesystems.disks.s3VideoDerivatives.driver' => 'string', 'filesystems.disks.s3VideoDerivatives.root' => 'string', 'filesystems.disks.s3VideoDerivatives.key' => 'string', - 'filesystems.disks.s3VideoDerivatives.secret' => 'NULL', + 'filesystems.disks.s3VideoDerivatives.secret' => 'string', 'filesystems.disks.s3VideoDerivatives.region' => 'string', 'filesystems.disks.s3VideoDerivatives.bucket' => 'string', 'filesystems.disks.s3VideoDerivatives.url' => 'NULL', @@ -2365,8 +2393,8 @@ 'mail.mailers.smtp.host' => 'string', 'mail.mailers.smtp.port' => 'string', 'mail.mailers.smtp.encryption' => 'NULL', - 'mail.mailers.smtp.username' => 'string', - 'mail.mailers.smtp.password' => 'string', + 'mail.mailers.smtp.username' => 'NULL', + 'mail.mailers.smtp.password' => 'NULL', 'mail.mailers.smtp.timeout' => 'NULL', 'mail.mailers.smtp.local_domain' => 'NULL', 'mail.mailers.ses.transport' => 'string', @@ -2389,7 +2417,7 @@ 'protector.fileName' => 'string', 'protector.maxPacketLength' => 'string', 'protector.baseDirectory' => 'string', - 'protector.remoteEndpoint.serverUrl' => 'string', + 'protector.remoteEndpoint.serverUrl' => 'NULL', 'protector.remoteEndpoint.htaccessLogin' => 'string', 'protector.dumpEndpointRoute' => 'string', 'protector.routeMiddleware' => 'string', @@ -2411,7 +2439,7 @@ 'queue.connections.beanstalkd.after_commit' => 'boolean', 'queue.connections.sqs.driver' => 'string', 'queue.connections.sqs.key' => 'string', - 'queue.connections.sqs.secret' => 'NULL', + 'queue.connections.sqs.secret' => 'string', 'queue.connections.sqs.prefix' => 'string', 'queue.connections.sqs.queue' => 'string', 'queue.connections.sqs.suffix' => 'NULL', @@ -2425,7 +2453,7 @@ 'queue.connections.redis.after_commit' => 'boolean', 'queue.connections.sqs-fifo.driver' => 'string', 'queue.connections.sqs-fifo.key' => 'string', - 'queue.connections.sqs-fifo.secret' => 'NULL', + 'queue.connections.sqs-fifo.secret' => 'string', 'queue.connections.sqs-fifo.prefix' => 'string', 'queue.connections.sqs-fifo.queue' => 'string', 'queue.connections.sqs-fifo.suffix' => 'NULL', @@ -2445,7 +2473,7 @@ 'sanctum.middleware.validate_csrf_token' => 'string', 'services.postmark.token' => 'NULL', 'services.ses.key' => 'string', - 'services.ses.secret' => 'NULL', + 'services.ses.secret' => 'string', 'services.ses.region' => 'string', 'services.resend.key' => 'NULL', 'services.slack.notifications.bot_user_oauth_token' => 'NULL', @@ -2488,7 +2516,7 @@ 'transmorpher.additional_transcoding_parameters' => 'string', 'transmorpher.cdn_helper' => 'string', 'transmorpher.aws.key' => 'string', - 'transmorpher.aws.secret' => 'NULL', + 'transmorpher.aws.secret' => 'string', 'transmorpher.aws.region' => 'string', 'transmorpher.aws.cloudfront_distribution_id' => 'string', 'transmorpher.signing_keypair' => 'string', @@ -2607,107 +2635,107 @@ 'app.aliases.Queue','app.aliases.RateLimiter','app.aliases.Redirect','app.aliases.Request','app.aliases.Response', 'app.aliases.Route','app.aliases.Schedule','app.aliases.Schema','app.aliases.Session','app.aliases.Storage', 'app.aliases.Str','app.aliases.URL','app.aliases.Uri','app.aliases.Validator','app.aliases.View', -'app.aliases.Vite','app.aliases.CdnHelper','app.aliases.Transcode','app.aliases.Transform','auth.defaults.guard', -'auth.defaults.passwords','auth.guards.web.driver','auth.guards.web.provider','auth.guards.sanctum.driver','auth.guards.sanctum.provider', -'auth.providers.users.driver','auth.providers.users.model','auth.passwords.users.provider','auth.passwords.users.table','auth.passwords.users.expire', -'auth.passwords.users.throttle','auth.password_timeout','broadcasting.default','broadcasting.connections.reverb.driver','broadcasting.connections.reverb.key', -'broadcasting.connections.reverb.secret','broadcasting.connections.reverb.app_id','broadcasting.connections.reverb.options.host','broadcasting.connections.reverb.options.port','broadcasting.connections.reverb.options.scheme', -'broadcasting.connections.reverb.options.useTLS','broadcasting.connections.reverb.client_options','broadcasting.connections.pusher.driver','broadcasting.connections.pusher.key','broadcasting.connections.pusher.secret', -'broadcasting.connections.pusher.app_id','broadcasting.connections.pusher.options.cluster','broadcasting.connections.pusher.options.host','broadcasting.connections.pusher.options.port','broadcasting.connections.pusher.options.scheme', -'broadcasting.connections.pusher.options.encrypted','broadcasting.connections.pusher.options.useTLS','broadcasting.connections.pusher.client_options','broadcasting.connections.ably.driver','broadcasting.connections.ably.key', -'broadcasting.connections.log.driver','broadcasting.connections.null.driver','broadcasting.connections.redis.driver','broadcasting.connections.redis.connection','cache.default', -'cache.stores.array.driver','cache.stores.array.serialize','cache.stores.database.driver','cache.stores.database.table','cache.stores.database.connection', -'cache.stores.database.lock_connection','cache.stores.file.driver','cache.stores.file.path','cache.stores.file.lock_path','cache.stores.memcached.driver', -'cache.stores.memcached.persistent_id','cache.stores.memcached.sasl','cache.stores.memcached.options','cache.stores.memcached.servers.0.host','cache.stores.memcached.servers.0.port', -'cache.stores.memcached.servers.0.weight','cache.stores.redis.driver','cache.stores.redis.connection','cache.stores.redis.lock_connection','cache.stores.dynamodb.driver', -'cache.stores.dynamodb.key','cache.stores.dynamodb.secret','cache.stores.dynamodb.region','cache.stores.dynamodb.table','cache.stores.dynamodb.endpoint', -'cache.stores.octane.driver','cache.stores.apc.driver','cache.prefix','chunk-upload.storage.chunks','chunk-upload.storage.disk', -'chunk-upload.clear.timestamp','chunk-upload.clear.schedule.enabled','chunk-upload.clear.schedule.cron','chunk-upload.chunk.name.use.session','chunk-upload.chunk.name.use.browser', -'chunk-upload.handlers.custom','chunk-upload.handlers.override','cors.paths','cors.allowed_methods','cors.allowed_origins', -'cors.allowed_origins_patterns','cors.allowed_headers','cors.exposed_headers','cors.max_age','cors.supports_credentials', -'database.default','database.connections.sqlite.driver','database.connections.sqlite.url','database.connections.sqlite.database','database.connections.sqlite.prefix', -'database.connections.sqlite.foreign_key_constraints','database.connections.mysql.driver','database.connections.mysql.url','database.connections.mysql.host','database.connections.mysql.port', -'database.connections.mysql.database','database.connections.mysql.username','database.connections.mysql.password','database.connections.mysql.unix_socket','database.connections.mysql.charset', -'database.connections.mysql.collation','database.connections.mysql.prefix','database.connections.mysql.prefix_indexes','database.connections.mysql.strict','database.connections.mysql.engine', -'database.connections.mysql.options','database.connections.mariadb.driver','database.connections.mariadb.url','database.connections.mariadb.host','database.connections.mariadb.port', -'database.connections.mariadb.database','database.connections.mariadb.username','database.connections.mariadb.password','database.connections.mariadb.unix_socket','database.connections.mariadb.charset', -'database.connections.mariadb.collation','database.connections.mariadb.prefix','database.connections.mariadb.prefix_indexes','database.connections.mariadb.strict','database.connections.mariadb.engine', -'database.connections.mariadb.options','database.connections.pgsql.driver','database.connections.pgsql.url','database.connections.pgsql.host','database.connections.pgsql.port', -'database.connections.pgsql.database','database.connections.pgsql.username','database.connections.pgsql.password','database.connections.pgsql.charset','database.connections.pgsql.prefix', -'database.connections.pgsql.prefix_indexes','database.connections.pgsql.search_path','database.connections.pgsql.sslmode','database.connections.sqlsrv.driver','database.connections.sqlsrv.url', -'database.connections.sqlsrv.host','database.connections.sqlsrv.port','database.connections.sqlsrv.database','database.connections.sqlsrv.username','database.connections.sqlsrv.password', -'database.connections.sqlsrv.charset','database.connections.sqlsrv.prefix','database.connections.sqlsrv.prefix_indexes','database.migrations.table','database.migrations.update_date_on_publish', -'database.redis.client','database.redis.options.cluster','database.redis.options.prefix','database.redis.default.url','database.redis.default.host', -'database.redis.default.username','database.redis.default.password','database.redis.default.port','database.redis.default.database','database.redis.cache.url', -'database.redis.cache.host','database.redis.cache.username','database.redis.cache.password','database.redis.cache.port','database.redis.cache.database', -'filesystems.default','filesystems.disks.local.driver','filesystems.disks.local.root','filesystems.disks.local.throw','filesystems.disks.public.driver', -'filesystems.disks.public.root','filesystems.disks.public.url','filesystems.disks.public.visibility','filesystems.disks.public.throw','filesystems.disks.s3.driver', -'filesystems.disks.s3.key','filesystems.disks.s3.secret','filesystems.disks.s3.region','filesystems.disks.s3.bucket','filesystems.disks.s3.url', -'filesystems.disks.s3.endpoint','filesystems.disks.s3.use_path_style_endpoint','filesystems.disks.s3.throw','filesystems.disks.s3.report','filesystems.disks.localOriginals.driver', -'filesystems.disks.localOriginals.root','filesystems.disks.localOriginals.throw','filesystems.disks.localImageDerivatives.driver','filesystems.disks.localImageDerivatives.root','filesystems.disks.localImageDerivatives.throw', -'filesystems.disks.localPdfDerivatives.driver','filesystems.disks.localPdfDerivatives.root','filesystems.disks.localPdfDerivatives.throw','filesystems.disks.localVideoDerivatives.driver','filesystems.disks.localVideoDerivatives.root', -'filesystems.disks.localVideoDerivatives.url','filesystems.disks.localVideoDerivatives.visibility','filesystems.disks.localVideoDerivatives.throw','filesystems.disks.s3Originals.driver','filesystems.disks.s3Originals.root', -'filesystems.disks.s3Originals.key','filesystems.disks.s3Originals.secret','filesystems.disks.s3Originals.region','filesystems.disks.s3Originals.bucket','filesystems.disks.s3Originals.url', -'filesystems.disks.s3Originals.endpoint','filesystems.disks.s3Originals.use_path_style_endpoint','filesystems.disks.s3Originals.throw','filesystems.disks.s3ImageDerivatives.driver','filesystems.disks.s3ImageDerivatives.root', -'filesystems.disks.s3ImageDerivatives.key','filesystems.disks.s3ImageDerivatives.secret','filesystems.disks.s3ImageDerivatives.region','filesystems.disks.s3ImageDerivatives.bucket','filesystems.disks.s3ImageDerivatives.url', -'filesystems.disks.s3ImageDerivatives.endpoint','filesystems.disks.s3ImageDerivatives.use_path_style_endpoint','filesystems.disks.s3ImageDerivatives.throw','filesystems.disks.s3PdfDerivatives.driver','filesystems.disks.s3PdfDerivatives.root', -'filesystems.disks.s3PdfDerivatives.key','filesystems.disks.s3PdfDerivatives.secret','filesystems.disks.s3PdfDerivatives.region','filesystems.disks.s3PdfDerivatives.bucket','filesystems.disks.s3PdfDerivatives.url', -'filesystems.disks.s3PdfDerivatives.endpoint','filesystems.disks.s3PdfDerivatives.use_path_style_endpoint','filesystems.disks.s3PdfDerivatives.throw','filesystems.disks.s3VideoDerivatives.driver','filesystems.disks.s3VideoDerivatives.root', -'filesystems.disks.s3VideoDerivatives.key','filesystems.disks.s3VideoDerivatives.secret','filesystems.disks.s3VideoDerivatives.region','filesystems.disks.s3VideoDerivatives.bucket','filesystems.disks.s3VideoDerivatives.url', -'filesystems.disks.s3VideoDerivatives.endpoint','filesystems.disks.s3VideoDerivatives.use_path_style_endpoint','filesystems.disks.s3VideoDerivatives.throw','filesystems.links./var/www/html/public/storage','filesystems.links./var/www/html/public/videos', -'hashing.driver','hashing.bcrypt.rounds','hashing.bcrypt.verify','hashing.argon.memory','hashing.argon.threads', -'hashing.argon.time','hashing.argon.verify','hashing.rehash_on_login','image.driver','image.options.autoOrientation', -'image.options.decodeAnimation','image.options.blendingColor','image.options.strip','image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Jpegoptim','image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Pngquant', -'image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Optipng','image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Gifsicle','image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Cwebp','image-optimizer.binary_path','image-optimizer.timeout', -'image-optimizer.log_optimizer_activity','logging.default','logging.deprecations.channel','logging.deprecations.trace','logging.channels.stack.driver', -'logging.channels.stack.channels','logging.channels.stack.ignore_exceptions','logging.channels.single.driver','logging.channels.single.path','logging.channels.single.level', -'logging.channels.single.replace_placeholders','logging.channels.daily.driver','logging.channels.daily.path','logging.channels.daily.level','logging.channels.daily.days', -'logging.channels.daily.replace_placeholders','logging.channels.slack.driver','logging.channels.slack.url','logging.channels.slack.username','logging.channels.slack.emoji', -'logging.channels.slack.level','logging.channels.slack.replace_placeholders','logging.channels.papertrail.driver','logging.channels.papertrail.level','logging.channels.papertrail.handler', -'logging.channels.papertrail.handler_with.host','logging.channels.papertrail.handler_with.port','logging.channels.papertrail.handler_with.connectionString','logging.channels.papertrail.processors','logging.channels.stderr.driver', -'logging.channels.stderr.level','logging.channels.stderr.handler','logging.channels.stderr.formatter','logging.channels.stderr.with.stream','logging.channels.stderr.processors', -'logging.channels.syslog.driver','logging.channels.syslog.level','logging.channels.syslog.facility','logging.channels.syslog.replace_placeholders','logging.channels.errorlog.driver', -'logging.channels.errorlog.level','logging.channels.errorlog.replace_placeholders','logging.channels.null.driver','logging.channels.null.handler','logging.channels.emergency.path', -'mail.default','mail.mailers.smtp.transport','mail.mailers.smtp.url','mail.mailers.smtp.host','mail.mailers.smtp.port', -'mail.mailers.smtp.encryption','mail.mailers.smtp.username','mail.mailers.smtp.password','mail.mailers.smtp.timeout','mail.mailers.smtp.local_domain', -'mail.mailers.ses.transport','mail.mailers.postmark.transport','mail.mailers.resend.transport','mail.mailers.sendmail.transport','mail.mailers.sendmail.path', -'mail.mailers.log.transport','mail.mailers.log.channel','mail.mailers.array.transport','mail.mailers.failover.transport','mail.mailers.failover.mailers', -'mail.mailers.roundrobin.transport','mail.mailers.roundrobin.mailers','mail.mailers.mailgun.transport','mail.from.address','mail.from.name', -'mail.markdown.theme','mail.markdown.paths','protector.fileName','protector.maxPacketLength','protector.baseDirectory', -'protector.remoteEndpoint.serverUrl','protector.remoteEndpoint.htaccessLogin','protector.dumpEndpointRoute','protector.routeMiddleware','protector.chunkSize', -'protector.httpTimeout','queue.default','queue.connections.sync.driver','queue.connections.database.driver','queue.connections.database.connection', -'queue.connections.database.table','queue.connections.database.queue','queue.connections.database.retry_after','queue.connections.database.after_commit','queue.connections.beanstalkd.driver', -'queue.connections.beanstalkd.host','queue.connections.beanstalkd.queue','queue.connections.beanstalkd.retry_after','queue.connections.beanstalkd.block_for','queue.connections.beanstalkd.after_commit', -'queue.connections.sqs.driver','queue.connections.sqs.key','queue.connections.sqs.secret','queue.connections.sqs.prefix','queue.connections.sqs.queue', -'queue.connections.sqs.suffix','queue.connections.sqs.region','queue.connections.sqs.after_commit','queue.connections.redis.driver','queue.connections.redis.connection', -'queue.connections.redis.queue','queue.connections.redis.retry_after','queue.connections.redis.block_for','queue.connections.redis.after_commit','queue.connections.sqs-fifo.driver', -'queue.connections.sqs-fifo.key','queue.connections.sqs-fifo.secret','queue.connections.sqs-fifo.prefix','queue.connections.sqs-fifo.queue','queue.connections.sqs-fifo.suffix', -'queue.connections.sqs-fifo.region','queue.connections.sqs-fifo.after_commit','queue.batching.database','queue.batching.table','queue.failed.driver', -'queue.failed.database','queue.failed.table','sanctum.stateful','sanctum.guard','sanctum.expiration', -'sanctum.token_prefix','sanctum.middleware.authenticate_session','sanctum.middleware.encrypt_cookies','sanctum.middleware.validate_csrf_token','services.postmark.token', -'services.ses.key','services.ses.secret','services.ses.region','services.resend.key','services.slack.notifications.bot_user_oauth_token', -'services.slack.notifications.channel','services.mailgun.domain','services.mailgun.secret','services.mailgun.endpoint','services.mailgun.scheme', -'session.driver','session.lifetime','session.expire_on_close','session.encrypt','session.files', -'session.connection','session.table','session.store','session.lottery','session.cookie', -'session.path','session.domain','session.secure','session.http_only','session.same_site', -'session.partitioned','transmorpher.dev_mode','transmorpher.store_derivatives','transmorpher.disks.originals','transmorpher.disks.imageDerivatives', -'transmorpher.disks.pdfDerivatives','transmorpher.disks.videoDerivatives','transmorpher.transform_class','transmorpher.convert_classes.jpg','transmorpher.convert_classes.png', -'transmorpher.convert_classes.gif','transmorpher.convert_classes.webp','transmorpher.pdf_default_image_format','transmorpher.transcode_class','transmorpher.video_codec', -'transmorpher.representations','transmorpher.additional_transcoding_parameters','transmorpher.cdn_helper','transmorpher.aws.key','transmorpher.aws.secret', -'transmorpher.aws.region','transmorpher.aws.cloudfront_distribution_id','transmorpher.signing_keypair','transmorpher.media_handlers.image','transmorpher.media_handlers.pdf', -'transmorpher.media_handlers.video','transmorpher.cache_invalidation_counter_file_path','view.paths','view.compiled','concurrency.default', -'flare.key','flare.flare_middleware','flare.flare_middleware.Spatie\\LaravelIgnition\\FlareMiddleware\\AddLogs.maximum_number_of_collected_logs','flare.flare_middleware.Spatie\\LaravelIgnition\\FlareMiddleware\\AddQueries.maximum_number_of_collected_queries','flare.flare_middleware.Spatie\\LaravelIgnition\\FlareMiddleware\\AddQueries.report_query_bindings', -'flare.flare_middleware.Spatie\\LaravelIgnition\\FlareMiddleware\\AddJobs.max_chained_job_reporting_depth','flare.flare_middleware.Spatie\\FlareClient\\FlareMiddleware\\CensorRequestBodyFields.censor_fields','flare.flare_middleware.Spatie\\FlareClient\\FlareMiddleware\\CensorRequestHeaders.headers','flare.send_logs_as_events','ignition.editor', -'ignition.theme','ignition.enable_share_button','ignition.register_commands','ignition.solution_providers','ignition.ignored_solution_providers', -'ignition.enable_runnable_solutions','ignition.remote_sites_path','ignition.local_sites_path','ignition.housekeeping_endpoint_prefix','ignition.settings_file_path', -'ignition.recorders','ignition.open_ai_key','ignition.with_stack_frame_arguments','ignition.argument_reducers','ide-helper.filename', -'ide-helper.models_filename','ide-helper.meta_filename','ide-helper.include_fluent','ide-helper.include_factory_builders','ide-helper.write_model_magic_where', -'ide-helper.write_model_external_builder_methods','ide-helper.write_model_relation_count_properties','ide-helper.write_eloquent_model_mixins','ide-helper.include_helpers','ide-helper.helper_files', -'ide-helper.model_locations','ide-helper.ignored_models','ide-helper.model_hooks','ide-helper.extra.Eloquent','ide-helper.extra.Session', -'ide-helper.magic','ide-helper.interfaces','ide-helper.model_camel_case_properties','ide-helper.type_overrides.integer','ide-helper.type_overrides.boolean', -'ide-helper.include_class_docblocks','ide-helper.force_fqn','ide-helper.use_generics_annotations','ide-helper.additional_relation_types','ide-helper.additional_relation_return_types', -'ide-helper.enforce_nullable_relationships','ide-helper.post_migrate','ide-helper.macroable_traits','tinker.commands','tinker.alias', -'tinker.dont_alias',); +'app.aliases.Vite','app.aliases.CdnHelper','app.aliases.Delivery','app.aliases.Optimize','app.aliases.Transcode', +'app.aliases.Transform','auth.defaults.guard','auth.defaults.passwords','auth.guards.web.driver','auth.guards.web.provider', +'auth.guards.sanctum.driver','auth.guards.sanctum.provider','auth.providers.users.driver','auth.providers.users.model','auth.passwords.users.provider', +'auth.passwords.users.table','auth.passwords.users.expire','auth.passwords.users.throttle','auth.password_timeout','broadcasting.default', +'broadcasting.connections.reverb.driver','broadcasting.connections.reverb.key','broadcasting.connections.reverb.secret','broadcasting.connections.reverb.app_id','broadcasting.connections.reverb.options.host', +'broadcasting.connections.reverb.options.port','broadcasting.connections.reverb.options.scheme','broadcasting.connections.reverb.options.useTLS','broadcasting.connections.reverb.client_options','broadcasting.connections.pusher.driver', +'broadcasting.connections.pusher.key','broadcasting.connections.pusher.secret','broadcasting.connections.pusher.app_id','broadcasting.connections.pusher.options.cluster','broadcasting.connections.pusher.options.host', +'broadcasting.connections.pusher.options.port','broadcasting.connections.pusher.options.scheme','broadcasting.connections.pusher.options.encrypted','broadcasting.connections.pusher.options.useTLS','broadcasting.connections.pusher.client_options', +'broadcasting.connections.ably.driver','broadcasting.connections.ably.key','broadcasting.connections.log.driver','broadcasting.connections.null.driver','broadcasting.connections.redis.driver', +'broadcasting.connections.redis.connection','cache.default','cache.stores.array.driver','cache.stores.array.serialize','cache.stores.database.driver', +'cache.stores.database.table','cache.stores.database.connection','cache.stores.database.lock_connection','cache.stores.file.driver','cache.stores.file.path', +'cache.stores.file.lock_path','cache.stores.memcached.driver','cache.stores.memcached.persistent_id','cache.stores.memcached.sasl','cache.stores.memcached.options', +'cache.stores.memcached.servers.0.host','cache.stores.memcached.servers.0.port','cache.stores.memcached.servers.0.weight','cache.stores.redis.driver','cache.stores.redis.connection', +'cache.stores.redis.lock_connection','cache.stores.dynamodb.driver','cache.stores.dynamodb.key','cache.stores.dynamodb.secret','cache.stores.dynamodb.region', +'cache.stores.dynamodb.table','cache.stores.dynamodb.endpoint','cache.stores.octane.driver','cache.stores.apc.driver','cache.prefix', +'chunk-upload.storage.chunks','chunk-upload.storage.disk','chunk-upload.clear.timestamp','chunk-upload.clear.schedule.enabled','chunk-upload.clear.schedule.cron', +'chunk-upload.chunk.name.use.session','chunk-upload.chunk.name.use.browser','chunk-upload.handlers.custom','chunk-upload.handlers.override','cors.paths', +'cors.allowed_methods','cors.allowed_origins','cors.allowed_origins_patterns','cors.allowed_headers','cors.exposed_headers', +'cors.max_age','cors.supports_credentials','database.default','database.connections.sqlite.driver','database.connections.sqlite.url', +'database.connections.sqlite.database','database.connections.sqlite.prefix','database.connections.sqlite.foreign_key_constraints','database.connections.mysql.driver','database.connections.mysql.url', +'database.connections.mysql.host','database.connections.mysql.port','database.connections.mysql.database','database.connections.mysql.username','database.connections.mysql.password', +'database.connections.mysql.unix_socket','database.connections.mysql.charset','database.connections.mysql.collation','database.connections.mysql.prefix','database.connections.mysql.prefix_indexes', +'database.connections.mysql.strict','database.connections.mysql.engine','database.connections.mysql.options','database.connections.mariadb.driver','database.connections.mariadb.url', +'database.connections.mariadb.host','database.connections.mariadb.port','database.connections.mariadb.database','database.connections.mariadb.username','database.connections.mariadb.password', +'database.connections.mariadb.unix_socket','database.connections.mariadb.charset','database.connections.mariadb.collation','database.connections.mariadb.prefix','database.connections.mariadb.prefix_indexes', +'database.connections.mariadb.strict','database.connections.mariadb.engine','database.connections.mariadb.options','database.connections.pgsql.driver','database.connections.pgsql.url', +'database.connections.pgsql.host','database.connections.pgsql.port','database.connections.pgsql.database','database.connections.pgsql.username','database.connections.pgsql.password', +'database.connections.pgsql.charset','database.connections.pgsql.prefix','database.connections.pgsql.prefix_indexes','database.connections.pgsql.search_path','database.connections.pgsql.sslmode', +'database.connections.sqlsrv.driver','database.connections.sqlsrv.url','database.connections.sqlsrv.host','database.connections.sqlsrv.port','database.connections.sqlsrv.database', +'database.connections.sqlsrv.username','database.connections.sqlsrv.password','database.connections.sqlsrv.charset','database.connections.sqlsrv.prefix','database.connections.sqlsrv.prefix_indexes', +'database.migrations.table','database.migrations.update_date_on_publish','database.redis.client','database.redis.options.cluster','database.redis.options.prefix', +'database.redis.default.url','database.redis.default.host','database.redis.default.username','database.redis.default.password','database.redis.default.port', +'database.redis.default.database','database.redis.cache.url','database.redis.cache.host','database.redis.cache.username','database.redis.cache.password', +'database.redis.cache.port','database.redis.cache.database','filesystems.default','filesystems.disks.local.driver','filesystems.disks.local.root', +'filesystems.disks.local.throw','filesystems.disks.public.driver','filesystems.disks.public.root','filesystems.disks.public.url','filesystems.disks.public.visibility', +'filesystems.disks.public.throw','filesystems.disks.s3.driver','filesystems.disks.s3.key','filesystems.disks.s3.secret','filesystems.disks.s3.region', +'filesystems.disks.s3.bucket','filesystems.disks.s3.url','filesystems.disks.s3.endpoint','filesystems.disks.s3.use_path_style_endpoint','filesystems.disks.s3.throw', +'filesystems.disks.s3.report','filesystems.disks.localOriginals.driver','filesystems.disks.localOriginals.root','filesystems.disks.localOriginals.throw','filesystems.disks.localImageDerivatives.driver', +'filesystems.disks.localImageDerivatives.root','filesystems.disks.localImageDerivatives.throw','filesystems.disks.localPdfDerivatives.driver','filesystems.disks.localPdfDerivatives.root','filesystems.disks.localPdfDerivatives.throw', +'filesystems.disks.localVideoDerivatives.driver','filesystems.disks.localVideoDerivatives.root','filesystems.disks.localVideoDerivatives.url','filesystems.disks.localVideoDerivatives.visibility','filesystems.disks.localVideoDerivatives.throw', +'filesystems.disks.s3Originals.driver','filesystems.disks.s3Originals.root','filesystems.disks.s3Originals.key','filesystems.disks.s3Originals.secret','filesystems.disks.s3Originals.region', +'filesystems.disks.s3Originals.bucket','filesystems.disks.s3Originals.url','filesystems.disks.s3Originals.endpoint','filesystems.disks.s3Originals.use_path_style_endpoint','filesystems.disks.s3Originals.throw', +'filesystems.disks.s3ImageDerivatives.driver','filesystems.disks.s3ImageDerivatives.root','filesystems.disks.s3ImageDerivatives.key','filesystems.disks.s3ImageDerivatives.secret','filesystems.disks.s3ImageDerivatives.region', +'filesystems.disks.s3ImageDerivatives.bucket','filesystems.disks.s3ImageDerivatives.url','filesystems.disks.s3ImageDerivatives.endpoint','filesystems.disks.s3ImageDerivatives.use_path_style_endpoint','filesystems.disks.s3ImageDerivatives.throw', +'filesystems.disks.s3PdfDerivatives.driver','filesystems.disks.s3PdfDerivatives.root','filesystems.disks.s3PdfDerivatives.key','filesystems.disks.s3PdfDerivatives.secret','filesystems.disks.s3PdfDerivatives.region', +'filesystems.disks.s3PdfDerivatives.bucket','filesystems.disks.s3PdfDerivatives.url','filesystems.disks.s3PdfDerivatives.endpoint','filesystems.disks.s3PdfDerivatives.use_path_style_endpoint','filesystems.disks.s3PdfDerivatives.throw', +'filesystems.disks.s3VideoDerivatives.driver','filesystems.disks.s3VideoDerivatives.root','filesystems.disks.s3VideoDerivatives.key','filesystems.disks.s3VideoDerivatives.secret','filesystems.disks.s3VideoDerivatives.region', +'filesystems.disks.s3VideoDerivatives.bucket','filesystems.disks.s3VideoDerivatives.url','filesystems.disks.s3VideoDerivatives.endpoint','filesystems.disks.s3VideoDerivatives.use_path_style_endpoint','filesystems.disks.s3VideoDerivatives.throw', +'filesystems.links./var/www/html/public/storage','filesystems.links./var/www/html/public/videos','hashing.driver','hashing.bcrypt.rounds','hashing.bcrypt.verify', +'hashing.argon.memory','hashing.argon.threads','hashing.argon.time','hashing.argon.verify','hashing.rehash_on_login', +'image.driver','image.options.autoOrientation','image.options.decodeAnimation','image.options.blendingColor','image.options.strip', +'image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Jpegoptim','image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Pngquant','image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Optipng','image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Gifsicle','image-optimizer.optimizers.Spatie\\ImageOptimizer\\Optimizers\\Cwebp', +'image-optimizer.binary_path','image-optimizer.timeout','image-optimizer.log_optimizer_activity','logging.default','logging.deprecations.channel', +'logging.deprecations.trace','logging.channels.stack.driver','logging.channels.stack.channels','logging.channels.stack.ignore_exceptions','logging.channels.single.driver', +'logging.channels.single.path','logging.channels.single.level','logging.channels.single.replace_placeholders','logging.channels.daily.driver','logging.channels.daily.path', +'logging.channels.daily.level','logging.channels.daily.days','logging.channels.daily.replace_placeholders','logging.channels.slack.driver','logging.channels.slack.url', +'logging.channels.slack.username','logging.channels.slack.emoji','logging.channels.slack.level','logging.channels.slack.replace_placeholders','logging.channels.papertrail.driver', +'logging.channels.papertrail.level','logging.channels.papertrail.handler','logging.channels.papertrail.handler_with.host','logging.channels.papertrail.handler_with.port','logging.channels.papertrail.handler_with.connectionString', +'logging.channels.papertrail.processors','logging.channels.stderr.driver','logging.channels.stderr.level','logging.channels.stderr.handler','logging.channels.stderr.formatter', +'logging.channels.stderr.with.stream','logging.channels.stderr.processors','logging.channels.syslog.driver','logging.channels.syslog.level','logging.channels.syslog.facility', +'logging.channels.syslog.replace_placeholders','logging.channels.errorlog.driver','logging.channels.errorlog.level','logging.channels.errorlog.replace_placeholders','logging.channels.null.driver', +'logging.channels.null.handler','logging.channels.emergency.path','mail.default','mail.mailers.smtp.transport','mail.mailers.smtp.url', +'mail.mailers.smtp.host','mail.mailers.smtp.port','mail.mailers.smtp.encryption','mail.mailers.smtp.username','mail.mailers.smtp.password', +'mail.mailers.smtp.timeout','mail.mailers.smtp.local_domain','mail.mailers.ses.transport','mail.mailers.postmark.transport','mail.mailers.resend.transport', +'mail.mailers.sendmail.transport','mail.mailers.sendmail.path','mail.mailers.log.transport','mail.mailers.log.channel','mail.mailers.array.transport', +'mail.mailers.failover.transport','mail.mailers.failover.mailers','mail.mailers.roundrobin.transport','mail.mailers.roundrobin.mailers','mail.mailers.mailgun.transport', +'mail.from.address','mail.from.name','mail.markdown.theme','mail.markdown.paths','protector.fileName', +'protector.maxPacketLength','protector.baseDirectory','protector.remoteEndpoint.serverUrl','protector.remoteEndpoint.htaccessLogin','protector.dumpEndpointRoute', +'protector.routeMiddleware','protector.chunkSize','protector.httpTimeout','queue.default','queue.connections.sync.driver', +'queue.connections.database.driver','queue.connections.database.connection','queue.connections.database.table','queue.connections.database.queue','queue.connections.database.retry_after', +'queue.connections.database.after_commit','queue.connections.beanstalkd.driver','queue.connections.beanstalkd.host','queue.connections.beanstalkd.queue','queue.connections.beanstalkd.retry_after', +'queue.connections.beanstalkd.block_for','queue.connections.beanstalkd.after_commit','queue.connections.sqs.driver','queue.connections.sqs.key','queue.connections.sqs.secret', +'queue.connections.sqs.prefix','queue.connections.sqs.queue','queue.connections.sqs.suffix','queue.connections.sqs.region','queue.connections.sqs.after_commit', +'queue.connections.redis.driver','queue.connections.redis.connection','queue.connections.redis.queue','queue.connections.redis.retry_after','queue.connections.redis.block_for', +'queue.connections.redis.after_commit','queue.connections.sqs-fifo.driver','queue.connections.sqs-fifo.key','queue.connections.sqs-fifo.secret','queue.connections.sqs-fifo.prefix', +'queue.connections.sqs-fifo.queue','queue.connections.sqs-fifo.suffix','queue.connections.sqs-fifo.region','queue.connections.sqs-fifo.after_commit','queue.batching.database', +'queue.batching.table','queue.failed.driver','queue.failed.database','queue.failed.table','sanctum.stateful', +'sanctum.guard','sanctum.expiration','sanctum.token_prefix','sanctum.middleware.authenticate_session','sanctum.middleware.encrypt_cookies', +'sanctum.middleware.validate_csrf_token','services.postmark.token','services.ses.key','services.ses.secret','services.ses.region', +'services.resend.key','services.slack.notifications.bot_user_oauth_token','services.slack.notifications.channel','services.mailgun.domain','services.mailgun.secret', +'services.mailgun.endpoint','services.mailgun.scheme','session.driver','session.lifetime','session.expire_on_close', +'session.encrypt','session.files','session.connection','session.table','session.store', +'session.lottery','session.cookie','session.path','session.domain','session.secure', +'session.http_only','session.same_site','session.partitioned','transmorpher.dev_mode','transmorpher.store_derivatives', +'transmorpher.disks.originals','transmorpher.disks.imageDerivatives','transmorpher.disks.pdfDerivatives','transmorpher.disks.videoDerivatives','transmorpher.transform_class', +'transmorpher.convert_classes.jpg','transmorpher.convert_classes.png','transmorpher.convert_classes.gif','transmorpher.convert_classes.webp','transmorpher.pdf_default_image_format', +'transmorpher.transcode_class','transmorpher.video_codec','transmorpher.representations','transmorpher.additional_transcoding_parameters','transmorpher.cdn_helper', +'transmorpher.aws.key','transmorpher.aws.secret','transmorpher.aws.region','transmorpher.aws.cloudfront_distribution_id','transmorpher.signing_keypair', +'transmorpher.media_handlers.image','transmorpher.media_handlers.pdf','transmorpher.media_handlers.video','transmorpher.cache_invalidation_counter_file_path','view.paths', +'view.compiled','concurrency.default','flare.key','flare.flare_middleware','flare.flare_middleware.Spatie\\LaravelIgnition\\FlareMiddleware\\AddLogs.maximum_number_of_collected_logs', +'flare.flare_middleware.Spatie\\LaravelIgnition\\FlareMiddleware\\AddQueries.maximum_number_of_collected_queries','flare.flare_middleware.Spatie\\LaravelIgnition\\FlareMiddleware\\AddQueries.report_query_bindings','flare.flare_middleware.Spatie\\LaravelIgnition\\FlareMiddleware\\AddJobs.max_chained_job_reporting_depth','flare.flare_middleware.Spatie\\FlareClient\\FlareMiddleware\\CensorRequestBodyFields.censor_fields','flare.flare_middleware.Spatie\\FlareClient\\FlareMiddleware\\CensorRequestHeaders.headers', +'flare.send_logs_as_events','ignition.editor','ignition.theme','ignition.enable_share_button','ignition.register_commands', +'ignition.solution_providers','ignition.ignored_solution_providers','ignition.enable_runnable_solutions','ignition.remote_sites_path','ignition.local_sites_path', +'ignition.housekeeping_endpoint_prefix','ignition.settings_file_path','ignition.recorders','ignition.open_ai_key','ignition.with_stack_frame_arguments', +'ignition.argument_reducers','ide-helper.filename','ide-helper.models_filename','ide-helper.meta_filename','ide-helper.include_fluent', +'ide-helper.include_factory_builders','ide-helper.write_model_magic_where','ide-helper.write_model_external_builder_methods','ide-helper.write_model_relation_count_properties','ide-helper.write_eloquent_model_mixins', +'ide-helper.include_helpers','ide-helper.helper_files','ide-helper.model_locations','ide-helper.ignored_models','ide-helper.model_hooks', +'ide-helper.extra.Eloquent','ide-helper.extra.Session','ide-helper.magic','ide-helper.interfaces','ide-helper.model_camel_case_properties', +'ide-helper.type_overrides.integer','ide-helper.type_overrides.boolean','ide-helper.include_class_docblocks','ide-helper.force_fqn','ide-helper.use_generics_annotations', +'ide-helper.additional_relation_types','ide-helper.additional_relation_return_types','ide-helper.enforce_nullable_relationships','ide-helper.post_migrate','ide-helper.macroable_traits', +'tinker.commands','tinker.alias','tinker.dont_alias',); registerArgumentsSet('middleware', 'web','api','auth','auth.basic','auth.session', 'cache.headers','can','guest','password.confirm','precognitive', @@ -2764,18 +2792,17 @@ 'version-deprecation-notice.version_soon_deprecated','version-deprecation-notice.update_client_implementations',); registerArgumentsSet('env', 'APP_NAME','APP_ENV','APP_KEY','APP_DEBUG','APP_URL', -'VIDEO_TRANSCODING_WORKERS_AMOUNT','APP_SERVICE','DOCKER_CONTAINER_NAME','FORWARD_DB_PORT','PULLPREVIEW_FIRST_RUN', -'PULLPREVIEW_PUBLIC_DNS','TRANSMORPHER_AUTH_TOKEN_HASH','PULLPREVIEW_URL','TRANSMORPHER_DEV_MODE','TRANSMORPHER_STORE_DERIVATIVES', -'TRANSMORPHER_DISK_ORIGINALS','TRANSMORPHER_DISK_IMAGE_DERIVATIVES','TRANSMORPHER_DISK_VIDEO_DERIVATIVES','TRANSMORPHER_SIGNING_KEYPAIR','TRANSMORPHER_OPTIMIZER_TIMEOUT', -'PROTECTOR_AUTH_TOKEN','PROTECTOR_PRIVATE_KEY','PROTECTOR_SERVER_URL','AWS_ACCESS_KEY_ID','AWS_DEFAULT_REGION', -'AWS_USE_PATH_STYLE_ENDPOINT','AWS_BUCKET_ORIGINALS','AWS_BUCKET_IMAGE_DERIVATIVES','AWS_BUCKET_VIDEO_DERIVATIVES','AWS_CLOUDFRONT_DISTRIBUTION_ID', +'APP_SERVICE','DOCKER_CONTAINER_NAME','TRANSMORPHER_DEV_MODE','TRANSMORPHER_STORE_DERIVATIVES','TRANSMORPHER_DISK_ORIGINALS', +'TRANSMORPHER_DISK_IMAGE_DERIVATIVES','TRANSMORPHER_DISK_PDF_DERIVATIVES','TRANSMORPHER_DISK_VIDEO_DERIVATIVES','TRANSMORPHER_SIGNING_KEYPAIR','TRANSMORPHER_OPTIMIZER_TIMEOUT', +'VIDEO_TRANSCODING_WORKERS_AMOUNT','AWS_ACCESS_KEY_ID','AWS_SECRET_ACCESS_KEY','AWS_DEFAULT_REGION','AWS_USE_PATH_STYLE_ENDPOINT', +'AWS_BUCKET_ORIGINALS','AWS_BUCKET_IMAGE_DERIVATIVES','AWS_BUCKET_PDF_DERIVATIVES','AWS_BUCKET_VIDEO_DERIVATIVES','AWS_CLOUDFRONT_DISTRIBUTION_ID', 'SQS_PREFIX','SQS_QUEUE','LOG_CHANNEL','LOG_DEPRECATIONS_CHANNEL','LOG_LEVEL', 'LOG_FOLDER','DB_CONNECTION','DB_HOST','DB_PORT','DB_DATABASE', 'DB_USERNAME','DB_PASSWORD','BROADCAST_DRIVER','CACHE_DRIVER','FILESYSTEM_DISK', -'QUEUE_CONNECTION','SESSION_DRIVER','SESSION_LIFETIME','MEMCACHED_HOST','REDIS_HOST', -'REDIS_PASSWORD','REDIS_PORT','MAIL_MAILER','MAIL_HOST','MAIL_PORT', -'MAIL_USERNAME','MAIL_PASSWORD','MAIL_ENCRYPTION','MAIL_FROM_ADDRESS','MAIL_FROM_NAME', -'SENTRY_LARAVEL_DSN',); +'QUEUE_CONNECTION','DB_QUEUE_CONNECTION','SESSION_DRIVER','SESSION_LIFETIME','MEMCACHED_HOST', +'REDIS_HOST','REDIS_PASSWORD','REDIS_PORT','MAIL_MAILER','MAIL_HOST', +'MAIL_PORT','MAIL_USERNAME','MAIL_PASSWORD','MAIL_ENCRYPTION','MAIL_FROM_ADDRESS', +'MAIL_FROM_NAME',); expectedArguments(\Illuminate\Support\Facades\Gate::has(), 0, argumentsSet('auth')); expectedArguments(\Illuminate\Support\Facades\Gate::allows(), 0, argumentsSet('auth')); diff --git a/_ide_helper.php b/_ide_helper.php index eab0787..1e6d16e 100644 --- a/_ide_helper.php +++ b/_ide_helper.php @@ -22391,6 +22391,77 @@ public static function isConfigured() * * */ + class DeliveryFacade { + /** + * Retrieve an original for a version. + * + * @param \App\Models\Version $version + * @return \Illuminate\Contracts\Foundation\Application|\Response|\Illuminate\Contracts\Routing\ResponseFactory + * @static + */ + public static function getOriginal($version) + { + /** @var \App\Classes\Delivery $instance */ + return $instance->getOriginal($version); + } + + /** + * + * + * @param string $transformations + * @param \App\Models\Version $version + * @param \App\Enums\MediaType $mediaType + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Response + * @static + */ + public static function getDerivative($transformations, $version, $mediaType) + { + /** @var \App\Classes\Delivery $instance */ + return $instance->getDerivative($transformations, $version, $mediaType); + } + + } + /** + * + * + */ + class OptimizeFacade { + /** + * Optimize an image derivative. + * + * Creates a temporary file since image optimizers only work locally. + * + * @param string $derivative + * @param int|null $quality + * @return string + * @throws Exception + * @static + */ + public static function optimize($derivative, $quality = null) + { + /** @var \App\Classes\Optimizer\Optimize $instance */ + return $instance->optimize($derivative, $quality); + } + + /** + * + * + * @param string $derivative + * @return string + * @throws Exception + * @static + */ + public static function removePdfMetadata($derivative) + { + /** @var \App\Classes\Optimizer\Optimize $instance */ + return $instance->removePdfMetadata($derivative); + } + + } + /** + * + * + */ class TranscodeFacade { /** * Returns the class which handles the actual transcoding. @@ -22462,7 +22533,6 @@ class TransformFacade { * @param string $pathToOriginalImage * @param array|null $transformations * @return string Binary string of the image. - * @throws FileNotFoundException * @static */ public static function transform($pathToOriginalImage, $transformations = null) @@ -28240,6 +28310,8 @@ class Validator extends \Illuminate\Support\Facades\Validator {} class View extends \Illuminate\Support\Facades\View {} class Vite extends \Illuminate\Support\Facades\Vite {} class CdnHelper extends \App\Facades\CdnHelperFacade {} + class Delivery extends \App\Facades\DeliveryFacade {} + class Optimize extends \App\Facades\OptimizeFacade {} class Transcode extends \App\Facades\TranscodeFacade {} class Transform extends \App\Facades\TransformFacade {} class Protector extends \Cybex\Protector\ProtectorFacade {} diff --git a/app/Helpers/DeliveryHelper.php b/app/Classes/Delivery.php similarity index 88% rename from app/Helpers/DeliveryHelper.php rename to app/Classes/Delivery.php index a2832f6..abadbc6 100644 --- a/app/Helpers/DeliveryHelper.php +++ b/app/Classes/Delivery.php @@ -1,6 +1,6 @@ getDisk(); $pathToOriginal = $version->originalFilePath(); @@ -35,7 +35,7 @@ public static function getOriginal(Version $version): Response|Application|Respo * @param MediaType $mediaType * @return Application|ResponseFactory|Response */ - public static function getDerivative(string $transformations, Version $version, MediaType $mediaType): ResponseFactory|Application|Response + public function getDerivative(string $transformations, Version $version, MediaType $mediaType): ResponseFactory|Application|Response { try { $transformationsArray = Transformation::arrayFromString($transformations); diff --git a/app/Classes/MediaHandler/ImageHandler.php b/app/Classes/MediaHandler/ImageHandler.php index ef12a39..811311a 100644 --- a/app/Classes/MediaHandler/ImageHandler.php +++ b/app/Classes/MediaHandler/ImageHandler.php @@ -2,19 +2,19 @@ namespace App\Classes\MediaHandler; -use App\Classes\Optimizer\Optimize; use App\Enums\ImageFormat; use App\Enums\MediaStorage; use App\Enums\MediaType; use App\Enums\ResponseState; use App\Enums\Transformation; use App\Models\Version; -use Illuminate\Contracts\Filesystem\Filesystem; +use Optimize; use Transform; -class ImageHandler extends AbstractMediaHandler +class ImageHandler extends StaticMediaHandler { protected MediaType $type = MediaType::IMAGE; + protected MediaStorage $derivativesStorage = MediaStorage::IMAGE_DERIVATIVES; protected ResponseState $uploadSuccessful = ResponseState::IMAGE_UPLOAD_SUCCESSFUL; protected ResponseState $uploadFailed = ResponseState::CDN_INVALIDATION_FAILED; protected ResponseState $versionSetSuccessful = ResponseState::IMAGE_VERSION_SET; @@ -28,14 +28,6 @@ public function getValidationRules(): string return sprintf('mimes:%s', implode(',', ImageFormat::getFormats())); } - /** - * @return Filesystem - */ - public function getDerivativesDisk(): Filesystem - { - return MediaStorage::IMAGE_DERIVATIVES->getDisk(); - } - /** * @param Version $version * @param array|null $transformationsArray diff --git a/app/Classes/MediaHandler/MediaHandler.php b/app/Classes/MediaHandler/MediaHandler.php new file mode 100644 index 0000000..816d9bb --- /dev/null +++ b/app/Classes/MediaHandler/MediaHandler.php @@ -0,0 +1,46 @@ +derivativesStorage->getDisk(); + } + + /** + * @param string $basePath + * @return bool + */ + public function invalidateCdnCache(string $basePath): bool + { + if (CdnHelper::isConfigured()) { + try { + CdnHelper::invalidateMedia($this->type, $basePath); + } catch (Throwable) { + return false; + } + } + + return true; + } +} diff --git a/app/Classes/MediaHandler/PdfHandler.php b/app/Classes/MediaHandler/PdfHandler.php index d69e073..a15149a 100644 --- a/app/Classes/MediaHandler/PdfHandler.php +++ b/app/Classes/MediaHandler/PdfHandler.php @@ -2,19 +2,19 @@ namespace App\Classes\MediaHandler; -use App\Classes\Optimizer\Optimize; use App\Enums\MediaStorage; use App\Enums\MediaType; use App\Enums\ResponseState; use App\Enums\Transformation; use App\Exceptions\PdfPageDoesNotExistException; use App\Models\Version; -use Illuminate\Contracts\Filesystem\Filesystem; +use Optimize; use Transform; -class PdfHandler extends AbstractMediaHandler +class PdfHandler extends StaticMediaHandler { protected MediaType $type = MediaType::PDF; + protected MediaStorage $derivativesStorage = MediaStorage::PDF_DERIVATIVES; protected ResponseState $uploadSuccessful = ResponseState::PDF_UPLOAD_SUCCESSFUL; protected ResponseState $uploadFailed = ResponseState::CDN_INVALIDATION_FAILED; protected ResponseState $versionSetSuccessful = ResponseState::PDF_VERSION_SET; @@ -28,14 +28,6 @@ public function getValidationRules(): string return 'mimetypes:application/pdf'; } - /** - * @return Filesystem - */ - public function getDerivativesDisk(): Filesystem - { - return MediaStorage::PDF_DERIVATIVES->getDisk(); - } - /** * @param Version $version * @param array|null $transformationsArray diff --git a/app/Classes/MediaHandler/AbstractMediaHandler.php b/app/Classes/MediaHandler/StaticMediaHandler.php similarity index 90% rename from app/Classes/MediaHandler/AbstractMediaHandler.php rename to app/Classes/MediaHandler/StaticMediaHandler.php index b1977b1..a8df414 100644 --- a/app/Classes/MediaHandler/AbstractMediaHandler.php +++ b/app/Classes/MediaHandler/StaticMediaHandler.php @@ -2,9 +2,7 @@ namespace App\Classes\MediaHandler; -use App\Enums\MediaType; use App\Enums\ResponseState; -use App\Interfaces\MediaHandlerInterface; use App\Models\Media; use App\Models\UploadSlot; use App\Models\User; @@ -12,15 +10,8 @@ use CdnHelper; use Throwable; -abstract class AbstractMediaHandler implements MediaHandlerInterface +abstract class StaticMediaHandler extends MediaHandler { - protected MediaType $type; - protected ResponseState $uploadSuccessful; - protected ResponseState $uploadFailed; - protected ResponseState $versionSetSuccessful; - protected ResponseState $versionSetFailed; - - public function handleSavedFile(string $basePath, UploadSlot $uploadSlot, Version $version): ResponseState { if ($this->invalidateCdnCache($basePath)) { diff --git a/app/Classes/MediaHandler/VideoHandler.php b/app/Classes/MediaHandler/VideoHandler.php index 8ee96a9..5b712f4 100644 --- a/app/Classes/MediaHandler/VideoHandler.php +++ b/app/Classes/MediaHandler/VideoHandler.php @@ -11,11 +11,17 @@ use App\Models\User; use App\Models\Version; use BadMethodCallException; -use Illuminate\Contracts\Filesystem\Filesystem; use Transcode; -class VideoHandler extends AbstractMediaHandler +class VideoHandler extends MediaHandler { + protected MediaType $type = MediaType::VIDEO; + protected MediaStorage $derivativesStorage = MediaStorage::VIDEO_DERIVATIVES; + protected ResponseState $uploadSuccessful = ResponseState::VIDEO_UPLOAD_SUCCESSFUL; + protected ResponseState $uploadFailed = ResponseState::TRANSCODING_JOB_DISPATCH_FAILED; + protected ResponseState $versionSetSuccessful = ResponseState::VIDEO_VERSION_SET; + protected ResponseState $versionSetFailed = ResponseState::TRANSCODING_JOB_DISPATCH_FAILED; + /** * @param string $basePath * @param UploadSlot $uploadSlot @@ -29,7 +35,7 @@ public function handleSavedFile(string $basePath, UploadSlot $uploadSlot, Versio $success = Transcode::createJob($version, $uploadSlot); \Log::info(sprintf('Transcoding job dispatched with result %s for media %s and version %s.', $success, $version->Media->identifier, $version->getKey())); - return $success ? ResponseState::VIDEO_UPLOAD_SUCCESSFUL : ResponseState::TRANSCODING_JOB_DISPATCH_FAILED; + return $success ? $this->uploadSuccessful : $this->uploadFailed; } /** @@ -54,7 +60,7 @@ public function setVersion(User $user, Version $version, int $oldVersionNumber, $uploadSlot = $user->UploadSlots()->withoutGlobalScopes()->updateOrCreate(['identifier' => $version->Media->identifier], ['media_type' => MediaType::VIDEO]); $success = Transcode::createJobForVersionUpdate($version, $uploadSlot, $oldVersionNumber, $wasProcessed); - $responseState = $success ? ResponseState::VIDEO_VERSION_SET : ResponseState::TRANSCODING_JOB_DISPATCH_FAILED; + $responseState = $success ? $this->versionSetSuccessful : $this->versionSetFailed; return [ $responseState, @@ -62,14 +68,6 @@ public function setVersion(User $user, Version $version, int $oldVersionNumber, ]; } - /** - * @return Filesystem - */ - public function getDerivativesDisk(): Filesystem - { - return MediaStorage::VIDEO_DERIVATIVES->getDisk(); - } - /** * @param Media $media * @return array diff --git a/app/Classes/Optimizer/Optimize.php b/app/Classes/Optimizer/Optimize.php index ee61997..af38e9d 100644 --- a/app/Classes/Optimizer/Optimize.php +++ b/app/Classes/Optimizer/Optimize.php @@ -17,9 +17,9 @@ class Optimize * @return string * @throws Exception */ - public static function optimize(string $derivative, int $quality = null): string + public function optimize(string $derivative, int $quality = null): string { - $tempFile = self::getTemporaryFile($derivative); + $tempFile = $this->getTemporaryFile($derivative); // Optimizes the image based on optimizers configured in 'config/image-optimizer.php'. ImageFormat::fromMimeType(mime_content_type($tempFile))->getOptimizer()->optimize($tempFile, $quality); @@ -40,9 +40,9 @@ public static function optimize(string $derivative, int $quality = null): string * @return string * @throws Exception */ - public static function removePdfMetadata(string $derivative): string + public function removePdfMetadata(string $derivative): string { - $tempFile = self::getTemporaryFile($derivative); + $tempFile = $this->getTemporaryFile($derivative); $pdfMerge = new PdfMerge(); try { @@ -61,7 +61,7 @@ public static function removePdfMetadata(string $derivative): string * @param string $derivative * @return false|string */ - protected static function getTemporaryFile(string $derivative): string|false + protected function getTemporaryFile(string $derivative): string|false { $tempFile = tempnam(sys_get_temp_dir(), 'transmorpher'); file_put_contents($tempFile, $derivative); diff --git a/app/Facades/DeliveryFacade.php b/app/Facades/DeliveryFacade.php new file mode 100644 index 0000000..4deca63 --- /dev/null +++ b/app/Facades/DeliveryFacade.php @@ -0,0 +1,18 @@ +app->singleton('optimize', fn(): Optimize => new Optimize()); + $this->app->singleton('delivery', fn(): Delivery => new Delivery()); } /** diff --git a/config/app.php b/config/app.php index 76661ee..53cc968 100644 --- a/config/app.php +++ b/config/app.php @@ -192,6 +192,8 @@ 'aliases' => Facade::defaultAliases()->merge([ 'CdnHelper' => App\Facades\CdnHelperFacade::class, + 'Delivery' => App\Facades\DeliveryFacade::class, + 'Optimize' => App\Facades\OptimizeFacade::class, 'Transcode' => App\Facades\TranscodeFacade::class, 'Transform' => App\Facades\TransformFacade::class, ])->toArray(),