From d6110dd6db792cdbdef89a01348c7707e7830576 Mon Sep 17 00:00:00 2001 From: User Date: Tue, 17 Jun 2025 19:40:41 -0400 Subject: [PATCH] 0.1.6B bugfix --- app/Remote/CopyManga.php | 26 +- bootstrap/app.php | 4 +- bun.lockb | Bin 188842 -> 173871 bytes composer.json | 5 +- composer.lock | 455 ++++++++++++++--------------- nixpacks.toml | 178 +++++++++++ package.json | 14 +- resources/js/Pages/Comic/Index.jsx | 3 +- 8 files changed, 435 insertions(+), 250 deletions(-) create mode 100644 nixpacks.toml diff --git a/app/Remote/CopyManga.php b/app/Remote/CopyManga.php index a65694f..10f8246 100644 --- a/app/Remote/CopyManga.php +++ b/app/Remote/CopyManga.php @@ -2,7 +2,7 @@ namespace App\Remote; -use DOMDocument; +use Dom\HTMLDocument; use Exception; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; @@ -16,7 +16,7 @@ class CopyManga { /** - * @var array Caching options + * @var array{caching: bool, cachingTimeout: int} Caching options * @deprecated */ protected array $options = [ @@ -36,8 +36,10 @@ class CopyManga /** * @var string Encryption for legacy image fetch + * + * Since 17/Jun/2025, the key is updated dynamically, added function to fetch the key now */ - protected string $encryptionKey = "xxxmanga.woo.key"; + protected string $encryptionKey = ""; /** * @var bool Use old method to fetch images list @@ -326,13 +328,23 @@ class CopyManga $responses = $this->execute($this->legacyBuildUrl("comic/{$comic}/chapter/{$chapter}"), "GET", $userAgent, ttl: 24 * 60 * 60 * 30); // Get Content Key - $dom = new DOMDocument(); - $dom->loadHTML($responses); - $dataNode = $dom->getElementsByTagName("div"); + $dom = HTMLDocument::createFromString($responses, LIBXML_NOERROR); + + $scriptNodes = $dom->getElementsByTagName('script'); + + foreach ($scriptNodes as $node) { + if (strpos($node->textContent, 'var jojo') !== false) { + if (preg_match("/var\s+jojo\s*=\s*'([^']+)'/", trim($node->textContent), $matches)) { + $this->encryptionKey = $matches[1]; + } + } + } + + $dataNodes = $dom->getElementsByTagName("div"); $encryptedData = ""; - foreach ($dataNode as $node) { + foreach ($dataNodes as $node) { if ($node->getAttribute("class") === 'imageData') { $encryptedData = $node->attributes->item(1)->value; break; diff --git a/bootstrap/app.php b/bootstrap/app.php index c3fcbff..18a5973 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -6,6 +6,7 @@ use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; use Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets; +use Illuminate\Http\Middleware\TrustProxies; use Sentry\Laravel\Integration; return Application::configure(basePath: dirname(__DIR__)) @@ -19,9 +20,10 @@ return Application::configure(basePath: dirname(__DIR__)) $middleware->web(append: [ HandleInertiaRequests::class, AddLinkHeadersForPreloadedAssets::class, + TrustProxies::class, ]); $middleware->statefulApi(); - // + $middleware->trustProxies(at: '*'); }) ->withExceptions(function (Exceptions $exceptions) { $exceptions->render(function (ServerException $e, Request $request) { diff --git a/bun.lockb b/bun.lockb index a26e7c161ce24c6f8dfbcc439e9a5ba1358c9a87..280fa6cead522a5efc6bdf4664491678d15b1499 100755 GIT binary patch delta 11668 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.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" + "symfony/string": "^7.2" }, "conflict": { "symfony/dependency-injection": "<6.4", @@ -4072,7 +4059,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.6" + "source": "https://github.com/symfony/console/tree/v7.3.0" }, "funding": [ { @@ -4088,11 +4075,11 @@ "type": "tidelift" } ], - "time": "2025-04-07T19:09:28+00:00" + "time": "2025-05-24T10:34:04+00:00" }, { "name": "symfony/css-selector", - "version": "v7.2.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -4137,7 +4124,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.2.0" + "source": "https://github.com/symfony/css-selector/tree/v7.3.0" }, "funding": [ { @@ -4224,16 +4211,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.2.5", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b" + "reference": "cf68d225bc43629de4ff54778029aee6dc191b83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", - "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/cf68d225bc43629de4ff54778029aee6dc191b83", + "reference": "cf68d225bc43629de4ff54778029aee6dc191b83", "shasum": "" }, "require": { @@ -4246,9 +4233,11 @@ "symfony/http-kernel": "<6.4" }, "require-dev": { + "symfony/console": "^6.4|^7.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/serializer": "^6.4|^7.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -4279,7 +4268,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.2.5" + "source": "https://github.com/symfony/error-handler/tree/v7.3.0" }, "funding": [ { @@ -4295,20 +4284,20 @@ "type": "tidelift" } ], - "time": "2025-03-03T07:12:39+00:00" + "time": "2025-05-29T07:19:49+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.2.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", "shasum": "" }, "require": { @@ -4359,7 +4348,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" }, "funding": [ { @@ -4375,7 +4364,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2025-04-22T09:11:45+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4455,16 +4444,16 @@ }, { "name": "symfony/finder", - "version": "v7.2.2", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb" + "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb", + "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", + "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", "shasum": "" }, "require": { @@ -4499,7 +4488,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.2.2" + "source": "https://github.com/symfony/finder/tree/v7.3.0" }, "funding": [ { @@ -4515,20 +4504,20 @@ "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2024-12-30T19:00:26+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "6023ec7607254c87c5e69fb3558255aca440d72b" + "reference": "4236baf01609667d53b20371486228231eb135fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6023ec7607254c87c5e69fb3558255aca440d72b", - "reference": "6023ec7607254c87c5e69fb3558255aca440d72b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4236baf01609667d53b20371486228231eb135fd", + "reference": "4236baf01609667d53b20371486228231eb135fd", "shasum": "" }, "require": { @@ -4545,6 +4534,7 @@ "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "symfony/cache": "^6.4.12|^7.1.5", + "symfony/clock": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/expression-language": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -4577,7 +4567,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.2.6" + "source": "https://github.com/symfony/http-foundation/tree/v7.3.0" }, "funding": [ { @@ -4593,20 +4583,20 @@ "type": "tidelift" } ], - "time": "2025-04-09T08:14:01+00:00" + "time": "2025-05-12T14:48:23+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "f9dec01e6094a063e738f8945ef69c0cfcf792ec" + "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9dec01e6094a063e738f8945ef69c0cfcf792ec", - "reference": "f9dec01e6094a063e738f8945ef69c0cfcf792ec", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ac7b8e163e8c83dce3abcc055a502d4486051a9f", + "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f", "shasum": "" }, "require": { @@ -4614,8 +4604,8 @@ "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/event-dispatcher": "^7.3", + "symfony/http-foundation": "^7.3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -4691,7 +4681,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.2.6" + "source": "https://github.com/symfony/http-kernel/tree/v7.3.0" }, "funding": [ { @@ -4707,20 +4697,20 @@ "type": "tidelift" } ], - "time": "2025-05-02T09:04:03+00:00" + "time": "2025-05-29T07:47:32+00:00" }, { "name": "symfony/mailer", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "998692469d6e698c6eadc7ef37a6530a9eabb356" + "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/998692469d6e698c6eadc7ef37a6530a9eabb356", - "reference": "998692469d6e698c6eadc7ef37a6530a9eabb356", + "url": "https://api.github.com/repos/symfony/mailer/zipball/0f375bbbde96ae8c78e4aa3e63aabd486e33364c", + "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c", "shasum": "" }, "require": { @@ -4771,7 +4761,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.2.6" + "source": "https://github.com/symfony/mailer/tree/v7.3.0" }, "funding": [ { @@ -4787,20 +4777,20 @@ "type": "tidelift" } ], - "time": "2025-04-04T09:50:51+00:00" + "time": "2025-04-04T09:51:09+00:00" }, { "name": "symfony/mime", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "706e65c72d402539a072d0d6ad105fff6c161ef1" + "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/706e65c72d402539a072d0d6ad105fff6c161ef1", - "reference": "706e65c72d402539a072d0d6ad105fff6c161ef1", + "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", + "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", "shasum": "" }, "require": { @@ -4855,7 +4845,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.2.6" + "source": "https://github.com/symfony/mime/tree/v7.3.0" }, "funding": [ { @@ -4871,20 +4861,20 @@ "type": "tidelift" } ], - "time": "2025-04-27T13:34:41+00:00" + "time": "2025-02-19T08:51:26+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.2.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" + "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/afb9a8038025e5dbc657378bfab9198d75f10fca", + "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca", "shasum": "" }, "require": { @@ -4922,7 +4912,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.3.0" }, "funding": [ { @@ -4938,7 +4928,7 @@ "type": "tidelift" } ], - "time": "2024-11-20T11:17:29+00:00" + "time": "2025-04-04T13:12:05+00:00" }, { "name": "symfony/polyfill-ctype", @@ -5579,16 +5569,16 @@ }, { "name": "symfony/process", - "version": "v7.2.5", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "87b7c93e57df9d8e39a093d32587702380ff045d" + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d", - "reference": "87b7c93e57df9d8e39a093d32587702380ff045d", + "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", "shasum": "" }, "require": { @@ -5620,7 +5610,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.2.5" + "source": "https://github.com/symfony/process/tree/v7.3.0" }, "funding": [ { @@ -5636,11 +5626,11 @@ "type": "tidelift" } ], - "time": "2025-03-13T12:21:46+00:00" + "time": "2025-04-17T09:11:12+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.2.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", @@ -5703,7 +5693,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.2.0" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.3.0" }, "funding": [ { @@ -5723,16 +5713,16 @@ }, { "name": "symfony/routing", - "version": "v7.2.3", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" + "reference": "8e213820c5fea844ecea29203d2a308019007c15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", - "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", + "url": "https://api.github.com/repos/symfony/routing/zipball/8e213820c5fea844ecea29203d2a308019007c15", + "reference": "8e213820c5fea844ecea29203d2a308019007c15", "shasum": "" }, "require": { @@ -5784,7 +5774,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.2.3" + "source": "https://github.com/symfony/routing/tree/v7.3.0" }, "funding": [ { @@ -5800,7 +5790,7 @@ "type": "tidelift" } ], - "time": "2025-01-17T10:56:55+00:00" + "time": "2025-05-24T20:43:28+00:00" }, { "name": "symfony/service-contracts", @@ -5887,16 +5877,16 @@ }, { "name": "symfony/string", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931" + "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/a214fe7d62bd4df2a76447c67c6b26e1d5e74931", - "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931", + "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", + "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", "shasum": "" }, "require": { @@ -5954,7 +5944,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.2.6" + "source": "https://github.com/symfony/string/tree/v7.3.0" }, "funding": [ { @@ -5970,20 +5960,20 @@ "type": "tidelift" } ], - "time": "2025-04-20T20:18:16+00:00" + "time": "2025-04-20T20:19:01+00:00" }, { "name": "symfony/translation", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6" + "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", - "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", + "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", "shasum": "" }, "require": { @@ -5993,6 +5983,7 @@ "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { + "nikic/php-parser": "<5.0", "symfony/config": "<6.4", "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", @@ -6006,7 +5997,7 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", "symfony/config": "^6.4|^7.0", "symfony/console": "^6.4|^7.0", @@ -6049,7 +6040,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.6" + "source": "https://github.com/symfony/translation/tree/v7.3.0" }, "funding": [ { @@ -6065,7 +6056,7 @@ "type": "tidelift" } ], - "time": "2025-04-07T19:09:28+00:00" + "time": "2025-05-29T07:19:49+00:00" }, { "name": "symfony/translation-contracts", @@ -6147,16 +6138,16 @@ }, { "name": "symfony/uid", - "version": "v7.2.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "2d294d0c48df244c71c105a169d0190bfb080426" + "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", - "reference": "2d294d0c48df244c71c105a169d0190bfb080426", + "url": "https://api.github.com/repos/symfony/uid/zipball/7beeb2b885cd584cd01e126c5777206ae4c3c6a3", + "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3", "shasum": "" }, "require": { @@ -6201,7 +6192,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.2.0" + "source": "https://github.com/symfony/uid/tree/v7.3.0" }, "funding": [ { @@ -6217,24 +6208,25 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2025-05-24T14:28:13+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb" + "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9c46038cd4ed68952166cf7001b54eb539184ccb", - "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/548f6760c54197b1084e1e5c71f6d9d523f2f78e", + "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { @@ -6284,7 +6276,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.2.6" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.0" }, "funding": [ { @@ -6300,7 +6292,7 @@ "type": "tidelift" } ], - "time": "2025-04-09T08:14:01+00:00" + "time": "2025-04-27T18:39:23+00:00" }, { "name": "tightenco/ziggy", @@ -6912,16 +6904,16 @@ }, { "name": "filp/whoops", - "version": "2.18.0", + "version": "2.18.3", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" + "reference": "59a123a3d459c5a23055802237cb317f609867e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", - "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5", + "reference": "59a123a3d459c5a23055802237cb317f609867e5", "shasum": "" }, "require": { @@ -6971,7 +6963,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.0" + "source": "https://github.com/filp/whoops/tree/2.18.3" }, "funding": [ { @@ -6979,7 +6971,7 @@ "type": "github" } ], - "time": "2025-03-15T12:00:00+00:00" + "time": "2025-06-16T00:02:10+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -7034,16 +7026,16 @@ }, { "name": "laravel/breeze", - "version": "v2.3.6", + "version": "v2.3.7", "source": { "type": "git", "url": "https://github.com/laravel/breeze.git", - "reference": "390cbc433cb72fa6050965000b2d56c9ba6fd713" + "reference": "73149b5d84be3881b2fdda94b2ad289e7905c1a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/breeze/zipball/390cbc433cb72fa6050965000b2d56c9ba6fd713", - "reference": "390cbc433cb72fa6050965000b2d56c9ba6fd713", + "url": "https://api.github.com/repos/laravel/breeze/zipball/73149b5d84be3881b2fdda94b2ad289e7905c1a4", + "reference": "73149b5d84be3881b2fdda94b2ad289e7905c1a4", "shasum": "" }, "require": { @@ -7091,20 +7083,20 @@ "issues": "https://github.com/laravel/breeze/issues", "source": "https://github.com/laravel/breeze" }, - "time": "2025-03-06T14:02:32+00:00" + "time": "2025-06-17T13:07:20+00:00" }, { "name": "laravel/pail", - "version": "v1.2.2", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/laravel/pail.git", - "reference": "f31f4980f52be17c4667f3eafe034e6826787db2" + "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pail/zipball/f31f4980f52be17c4667f3eafe034e6826787db2", - "reference": "f31f4980f52be17c4667f3eafe034e6826787db2", + "url": "https://api.github.com/repos/laravel/pail/zipball/8cc3d575c1f0e57eeb923f366a37528c50d2385a", + "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a", "shasum": "" }, "require": { @@ -7124,7 +7116,7 @@ "orchestra/testbench-core": "^8.13|^9.0|^10.0", "pestphp/pest": "^2.20|^3.0", "pestphp/pest-plugin-type-coverage": "^2.3|^3.0", - "phpstan/phpstan": "^1.10", + "phpstan/phpstan": "^1.12.27", "symfony/var-dumper": "^6.3|^7.0" }, "type": "library", @@ -7160,6 +7152,7 @@ "description": "Easily delve into your Laravel application's log files directly from the command line.", "homepage": "https://github.com/laravel/pail", "keywords": [ + "dev", "laravel", "logs", "php", @@ -7169,7 +7162,7 @@ "issues": "https://github.com/laravel/pail/issues", "source": "https://github.com/laravel/pail" }, - "time": "2025-01-28T15:15:15+00:00" + "time": "2025-06-05T13:55:57+00:00" }, { "name": "laravel/pint", @@ -7445,23 +7438,23 @@ }, { "name": "nunomaduro/collision", - "version": "v8.8.0", + "version": "v8.8.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "4cf9f3b47afff38b139fb79ce54fc71799022ce8" + "reference": "44ccb82e3e21efb5446748d2a3c81a030ac22bd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/4cf9f3b47afff38b139fb79ce54fc71799022ce8", - "reference": "4cf9f3b47afff38b139fb79ce54fc71799022ce8", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/44ccb82e3e21efb5446748d2a3c81a030ac22bd5", + "reference": "44ccb82e3e21efb5446748d2a3c81a030ac22bd5", "shasum": "" }, "require": { - "filp/whoops": "^2.18.0", - "nunomaduro/termwind": "^2.3.0", + "filp/whoops": "^2.18.1", + "nunomaduro/termwind": "^2.3.1", "php": "^8.2.0", - "symfony/console": "^7.2.5" + "symfony/console": "^7.3.0" }, "conflict": { "laravel/framework": "<11.44.2 || >=13.0.0", @@ -7469,15 +7462,15 @@ }, "require-dev": { "brianium/paratest": "^7.8.3", - "larastan/larastan": "^3.2", - "laravel/framework": "^11.44.2 || ^12.6", - "laravel/pint": "^1.21.2", - "laravel/sail": "^1.41.0", - "laravel/sanctum": "^4.0.8", + "larastan/larastan": "^3.4.2", + "laravel/framework": "^11.44.2 || ^12.18", + "laravel/pint": "^1.22.1", + "laravel/sail": "^1.43.1", + "laravel/sanctum": "^4.1.1", "laravel/tinker": "^2.10.1", - "orchestra/testbench-core": "^9.12.0 || ^10.1", - "pestphp/pest": "^3.8.0", - "sebastian/environment": "^7.2.0 || ^8.0" + "orchestra/testbench-core": "^9.12.0 || ^10.4", + "pestphp/pest": "^3.8.2", + "sebastian/environment": "^7.2.1 || ^8.0" }, "type": "library", "extra": { @@ -7540,7 +7533,7 @@ "type": "patreon" } ], - "time": "2025-04-03T14:33:09+00:00" + "time": "2025-06-11T01:04:21+00:00" }, { "name": "pestphp/pest", @@ -9696,16 +9689,16 @@ }, { "name": "symfony/yaml", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "0feafffb843860624ddfd13478f481f4c3cd8b23" + "reference": "cea40a48279d58dc3efee8112634cb90141156c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/0feafffb843860624ddfd13478f481f4c3cd8b23", - "reference": "0feafffb843860624ddfd13478f481f4c3cd8b23", + "url": "https://api.github.com/repos/symfony/yaml/zipball/cea40a48279d58dc3efee8112634cb90141156c2", + "reference": "cea40a48279d58dc3efee8112634cb90141156c2", "shasum": "" }, "require": { @@ -9748,7 +9741,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.6" + "source": "https://github.com/symfony/yaml/tree/v7.3.0" }, "funding": [ { @@ -9764,7 +9757,7 @@ "type": "tidelift" } ], - "time": "2025-04-04T10:10:11+00:00" + "time": "2025-04-04T10:10:33+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", diff --git a/nixpacks.toml b/nixpacks.toml new file mode 100644 index 0000000..6aabe3e --- /dev/null +++ b/nixpacks.toml @@ -0,0 +1,178 @@ +[phases.setup] +nixPkgs = ["...", "python311Packages.supervisor"] + +[phases.build] +cmds = [ + "mkdir -p /etc/supervisor/conf.d/", + "cp /assets/worker-*.conf /etc/supervisor/conf.d/", + "cp /assets/supervisord.conf /etc/supervisord.conf", + "chmod +x /assets/start.sh", + "..." +] + +[start] +cmd = '/assets/start.sh' + +[staticAssets] +"start.sh" = ''' +#!/bin/bash + +# Transform the nginx configuration +node /assets/scripts/prestart.mjs /assets/nginx.template.conf /etc/nginx.conf + +# Start supervisor +supervisord -c /etc/supervisord.conf -n +''' + +"supervisord.conf" = ''' +[unix_http_server] +file=/assets/supervisor.sock + +[supervisord] +logfile=/var/log/supervisord.log +logfile_maxbytes=50MB +logfile_backups=10 +loglevel=info +pidfile=/assets/supervisord.pid +nodaemon=false +silent=false +minfds=1024 +minprocs=200 + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///assets/supervisor.sock + +[include] +files = /etc/supervisor/conf.d/*.conf +''' + +"worker-nginx.conf" = ''' +[program:worker-nginx] +process_name=%(program_name)s_%(process_num)02d +command=nginx -c /etc/nginx.conf +autostart=true +autorestart=true +stdout_logfile=/var/log/worker-nginx.log +stderr_logfile=/var/log/worker-nginx.log +''' + +"worker-phpfpm.conf" = ''' +[program:worker-phpfpm] +process_name=%(program_name)s_%(process_num)02d +command=php-fpm -y /assets/php-fpm.conf -F +autostart=true +autorestart=true +stdout_logfile=/var/log/worker-phpfpm.log +stderr_logfile=/var/log/worker-phpfpm.log +''' + +"worker-laravel.conf" = ''' +[program:worker-laravel] +process_name=%(program_name)s_%(process_num)02d +command=bash -c 'exec php /app/artisan queue:work --sleep=3 --tries=3 --max-time=3600' +autostart=true +autorestart=true +stopasgroup=true +killasgroup=true +numprocs=2 # To reduce memory/CPU usage, change to 2. +startsecs=0 +stopwaitsecs=3600 +stdout_logfile=/var/log/worker-laravel.log +stderr_logfile=/var/log/worker-laravel.log +''' + +"php-fpm.conf" = ''' +[www] +listen = 127.0.0.1:9000 +user = www-data +group = www-data +listen.owner = www-data +listen.group = www-data +pm = dynamic +pm.max_children = 50 +pm.min_spare_servers = 4 +pm.max_spare_servers = 32 +pm.start_servers = 18 +clear_env = no +php_admin_value[post_max_size] = 35M +php_admin_value[upload_max_filesize] = 30M +''' + +"nginx.template.conf" = ''' +user www-data www-data; +worker_processes 5; +daemon off; + +worker_rlimit_nofile 8192; + +events { + worker_connections 4096; # Default: 1024 +} + +http { + include $!{nginx}/conf/mime.types; + index index.html index.htm index.php; + + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] $status ' + '"$request" $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx-access.log; + error_log /var/log/nginx-error.log; + sendfile on; + tcp_nopush on; + server_names_hash_bucket_size 128; # this seems to be required for some vhosts + + server { + listen ${PORT}; + listen [::]:${PORT}; + server_name localhost; + + $if(NIXPACKS_PHP_ROOT_DIR) ( + root ${NIXPACKS_PHP_ROOT_DIR}; + ) else ( + root /app; + ) + + add_header X-Content-Type-Options "nosniff"; + + client_max_body_size 35M; + + index index.php; + + charset utf-8; + + $if(NIXPACKS_PHP_FALLBACK_PATH) ( + location / { + try_files $uri $uri/ ${NIXPACKS_PHP_FALLBACK_PATH}?$query_string; + } + ) else ( + location / { + try_files $uri $uri/ /index.php?$query_string; + } + ) + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + $if(IS_LARAVEL) ( + error_page 404 /index.php; + ) else () + + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_buffer_size 8k; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + include $!{nginx}/conf/fastcgi_params; + include $!{nginx}/conf/fastcgi.conf; + } + + location ~ /\.(?!well-known).* { + deny all; + } + } +} +''' diff --git a/package.json b/package.json index 0367f7a..10c3545 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,14 @@ }, "devDependencies": { "@headlessui/react": "^2.2.4", - "@inertiajs/react": "^2.0.11", + "@inertiajs/react": "^2.0.12", "@tailwindcss/forms": "^0.5.10", - "@vitejs/plugin-react": "^4.5.0", + "@vitejs/plugin-react": "^4.5.2", "autoprefixer": "^10.4.21", - "axios": "^1.9.0", + "axios": "^1.10.0", "concurrently": "^9.1.2", - "laravel-vite-plugin": "^1.2.0", - "postcss": "^8.5.3", + "laravel-vite-plugin": "^1.3.0", + "postcss": "^8.5.6", "react": "^18.3.1", "react-dom": "^18.3.1", "tailwindcss": "^3.4.17", @@ -43,11 +43,11 @@ "lodash": "^4.17.21", "lucide-react": "^0.468.0", "luxon": "^3.6.1", - "react-hook-form": "^7.56.4", + "react-hook-form": "^7.58.1", "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7", "use-double-tap": "^1.3.7", "use-long-press": "^3.3.0", - "zod": "^3.25.32" + "zod": "^3.25.67" } } diff --git a/resources/js/Pages/Comic/Index.jsx b/resources/js/Pages/Comic/Index.jsx index b42f279..f2da79a 100644 --- a/resources/js/Pages/Comic/Index.jsx +++ b/resources/js/Pages/Comic/Index.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useMemo } from 'react'; import { Head, Link } from '@inertiajs/react'; import { Star } from 'lucide-react'; @@ -13,7 +13,6 @@ import { useToast } from '@/hooks/use-toast.js'; export default function Index({ comics = [], offset = 0, auth = {} }) { const url = new URL(window.location); // searchParams - const [favourites, setFavourites] = useState((auth?.user?.favourites !== null) ? auth.user.favourites : []); const { toast } = useToast();