From 94a6ecfcde43de6635844ad2d775de8a8ddde07b Mon Sep 17 00:00:00 2001 From: Mohammed Shifreen Date: Sat, 24 Oct 2026 23:27:27 +0530 Subject: [PATCH 1/3] * Fixed deploy script and made some other changes. --- .env.example | 15 +- .github/workflows/deploy.yml | 1 + assets/js/app.js | 2 + assets/js/unsubscribe.js | 135 ++++++++++++++ compose.yml | 2 + config/config.php | 10 +- config/routes.php | 7 +- docker/nginx/nginx.caddy.conf | 4 + docs/DEPLOYMENT.md | 14 +- scripts/deploy.sh | 43 ++++- .../Contract/Service/UnsubscribeInterface.php | 29 +++ .../Presentation/Api/Controller/Subscribe.php | 8 +- .../Api/Controller/Unsubscribe.php | 76 ++++++++ .../Presentation/Api/Model/Subscribe.php | 5 +- .../Presentation/Api/Model/Unsubscribe.php | 71 ++++++++ .../Presentation/Api/RequestParser.php | 32 +++- .../Http/Controller/Page/Unsubscribe.php | 35 ++++ src/Infrastructure/Service/Subscribe.php | 146 ++++++++++----- src/Infrastructure/Service/Unsubscribe.php | 168 ++++++++++++++++++ src/Infrastructure/Service/View.php | 24 --- templates/partials/footer.php | 1 - templates/privacy.php | 29 ++- templates/unsubscribe.php | 73 ++++++++ 23 files changed, 809 insertions(+), 121 deletions(-) create mode 100644 assets/js/unsubscribe.js create mode 100644 src/Infrastructure/Contract/Service/UnsubscribeInterface.php create mode 100644 src/Infrastructure/Presentation/Api/Controller/Unsubscribe.php create mode 100644 src/Infrastructure/Presentation/Api/Model/Unsubscribe.php create mode 100644 src/Infrastructure/Presentation/Http/Controller/Page/Unsubscribe.php create mode 100644 src/Infrastructure/Service/Unsubscribe.php create mode 100644 templates/unsubscribe.php diff --git a/.env.example b/.env.example index acfce74..e3244cf 100644 --- a/.env.example +++ b/.env.example @@ -6,8 +6,9 @@ APP_ENV=production APP_DEBUG=false APP_BASE_URL=http://localhost -# NGINX (internal port 80, mapped to host port 3000 for Caddy reverse proxy) -NGINX_PORT=3000 +# NGINX +NGINX_PORT=80 +NGINX_PORT_SSL=443 # Vite VITE_PORT=5173 @@ -16,12 +17,10 @@ VITE_BASE_URL=/ VITE_DEV_SERVER_URL=http://localhost:5173 # Mailing list -MAIL_LIST_URL=https://localhost:9000 -MAIL_LIST_API_KEY=the_api_key - -# Analytics -ANALYTICS_SCRIPT_URL=https://analytics.example.com/script.js -ANALYTICS_WEBSITE_ID=your-website-id +MAIL_LIST_URL=https://api.brevo.com/v3 +MAIL_LIST_API_KEY=your-brevo-api-key +MAIL_LIST_IDS=1 +MAIL_LIST_UPDATE_ENABLED=true # Error tracking ERROR_TRACKING_DSN= diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f9b2948..23de5b8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -100,6 +100,7 @@ jobs: [ -f /tmp/compose.override.yml.bak ] && mv /tmp/compose.override.yml.bak compose.override.yml || true echo ">>> Running deployment script..." + export DEPLOY_ENV=production bash scripts/deploy.sh echo ">>> Deployment complete!" diff --git a/assets/js/app.js b/assets/js/app.js index 644d0ac..56a70b2 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -17,6 +17,7 @@ import * as nav from "./nav.js"; import * as theme from "./theme.js"; import * as reveal from "./reveal.js"; import * as signup from "./signup.js"; +import * as unsubscribe from "./unsubscribe.js"; import * as copy from "./copy.js"; highlight.init(); @@ -24,4 +25,5 @@ nav.init(); theme.init(); reveal.init(); signup.init(); +unsubscribe.init(); copy.init(); diff --git a/assets/js/unsubscribe.js b/assets/js/unsubscribe.js new file mode 100644 index 0000000..0dd7453 --- /dev/null +++ b/assets/js/unsubscribe.js @@ -0,0 +1,135 @@ +// ================================================================ +// NEWSLETTER UNSUBSCRIBE / DATA DELETION FORM +// ================================================================ +// Handles client-side validation and submission of the data +// deletion request form to POST /api/unsubscribe. +// +// Required HTML elements (all inside #unsubscribeForm): +// #uEmail — email input field +// #emailErr — error message container +// #unsubscribeSuccess — success message (shown after submit) +// +// Validation rules: +// - Email: required, must contain @ and . +// +// API response handling: +// - 200 + { success: true } → show success +// - 422 + { errors: {...} } → show field-level errors from server +// - Other / network error → generic alert +// +// CSS classes toggled: +// .--error on input — red border highlight +// .--show on — error message visible +// ================================================================ + +export function init() { + var form = document.getElementById("unsubscribeForm"); + if (!form) return; + + // --- DOM references --- + var eIn = document.getElementById("uEmail"); + var eErr = document.getElementById("emailErr"); + var succ = document.getElementById("unsubscribeSuccess"); + + // Toggle error state on a single field + its error message + function err(inp, el, show) { + inp.classList.toggle("--error", show); + el.classList.toggle("--show", show); + } + + // Reset all field errors and clear message text + function clearFieldErrors() { + err(eIn, eErr, false); + eErr.textContent = ""; + } + + // Toggle submit button text and disabled state during fetch + function setSubmitting(submitting, btn, originalText) { + btn.textContent = submitting ? "Deleting..." : originalText; + btn.disabled = submitting; + } + + // Hide form and show the success message block + function showSuccess() { + form.style.display = "none"; + succ.style.display = "block"; + } + + // Display server-returned validation errors next to each field. + function showFieldErrors(errors) { + clearFieldErrors(); + + if (errors.email) { + eIn.classList.add("--error"); + eErr.textContent = errors.email[0]; + eErr.classList.add("--show"); + } + } + + // --- Form submission --- + form.addEventListener("submit", function (e) { + e.preventDefault(); + clearFieldErrors(); + + var ev = eIn.value.trim(); + var ok = true; + + // Client-side validation + if (!ev || !ev.includes("@") || !ev.includes(".")) { + err(eIn, eErr, true); + ok = false; + } + if (!ok) return; + + var btn = form.querySelector('button[type="submit"]'); + var originalText = btn.textContent; + + setSubmitting(true, btn, originalText); + + // POST to the unsubscribe API endpoint + fetch("/api/unsubscribe", { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-Requested-With": "XMLHttpRequest", + }, + body: JSON.stringify({ email: ev }), + }) + .then(function (res) { + return res.json().then(function (data) { + return { ok: res.ok, status: res.status, data: data }; + }); + }) + .then(function (result) { + var data = result.data; + + // Success (includes case where contact was not found - treated as success) + if (result.ok && data.success) { + showSuccess(); + return; + } + + // Server-side validation failed — show field errors + if (422 === result.status && data.errors) { + showFieldErrors(data.errors); + setSubmitting(false, btn, originalText); + return; + } + + // Unexpected response — generic error + setSubmitting(false, btn, originalText); + alert(data.message || "Something went wrong. Please try again later."); + }) + .catch(function () { + // Network error or JSON parse failure + setSubmitting(false, btn, originalText); + alert("Something went wrong. Please try again later."); + }); + }); + + // --- Inline error clearing --- + // Clear a field's error state as soon as the user starts typing + eIn.addEventListener("input", function () { + err(eIn, eErr, false); + }); +} \ No newline at end of file diff --git a/compose.yml b/compose.yml index 50baec9..9a82663 100644 --- a/compose.yml +++ b/compose.yml @@ -28,8 +28,10 @@ services: volumes: - app-data:/var/www/html:ro - ./docker/nginx/nginx.caddy.conf:/etc/nginx/conf.d/default.conf + - ./docker/nginx/ssl:/etc/nginx/ssl:ro ports: - "${NGINX_PORT}:80" + - "${NGINX_PORT_SSL}:443" restart: always networks: - webifycms-site diff --git a/config/config.php b/config/config.php index ad311d2..64047f0 100644 --- a/config/config.php +++ b/config/config.php @@ -50,14 +50,12 @@ ], 'themes' => [], 'mailList' => [ - 'url' => $_ENV['MAIL_LIST_URL'] ?? '', - 'apiKey' => $_ENV['MAIL_LIST_API_KEY'] ?? '', + 'url' => $_ENV['MAIL_LIST_URL'] ?? 'https://api.brevo.com/v3', + 'apiKey' => $_ENV['MAIL_LIST_API_KEY'] ?? '', + 'listIds' => array_filter(array_map('intval', array_map('trim', explode(',', $_ENV['MAIL_LIST_IDS'] ?? '')))), + 'updateEnabled' => filter_var($_ENV['MAIL_LIST_UPDATE_ENABLED'] ?? true, FILTER_VALIDATE_BOOLEAN), ], 'errorTracking' => [ 'dsn' => $_ENV['ERROR_TRACKING_DSN'] ?? '', ], - 'analytics' => [ - 'scriptUrl' => $_ENV['ANALYTICS_SCRIPT_URL'] ?? '', - 'websiteId' => $_ENV['ANALYTICS_WEBSITE_ID'] ?? '', - ], ]; diff --git a/config/routes.php b/config/routes.php index cce0f58..f7b87aa 100644 --- a/config/routes.php +++ b/config/routes.php @@ -11,10 +11,10 @@ */ declare(strict_types=1); -use App\Infrastructure\Presentation\Api\Controller\Subscribe; +use App\Infrastructure\Presentation\Api\Controller\{Subscribe, Unsubscribe as UnsubscribeController}; use App\Infrastructure\Presentation\Api\Middleware\{ExceptionHandler, RateLimiter}; use App\Infrastructure\Presentation\Http\Controller\Docs\Docs as DocsController; -use App\Infrastructure\Presentation\Http\Controller\Page\{Contributing, Extensions, Home, Install, License, NotFound, Privacy, Sitemap}; +use App\Infrastructure\Presentation\Http\Controller\Page\{Contributing, Extensions, Home, Install, License, NotFound, Privacy, Sitemap, Unsubscribe as UnsubscribePage}; use App\Infrastructure\Presentation\Http\Controller\Publishing\{Posts, Single}; use League\Route\{RouteGroup, Router}; use Psr\Container\ContainerInterface; @@ -34,6 +34,8 @@ $router->map('GET', '/contributing', Contributing::class); // Privacy policy page $router->map('GET', '/privacy', Privacy::class); + // Data deletion request page + $router->map('GET', '/unsubscribe', UnsubscribePage::class); // Extensions page $router->map('GET', '/extensions', Extensions::class); // Install page @@ -56,6 +58,7 @@ // API routes with rate limiting and exception handling $router->group('/api', static function (RouteGroup $route) { $route->map('POST', '/subscribe', Subscribe::class); + $route->map('POST', '/unsubscribe', UnsubscribeController::class); }) ->middleware($container->get(ExceptionHandler::class)) ->middleware($container->get(RateLimiter::class)) diff --git a/docker/nginx/nginx.caddy.conf b/docker/nginx/nginx.caddy.conf index 0b370da..e7c7f59 100644 --- a/docker/nginx/nginx.caddy.conf +++ b/docker/nginx/nginx.caddy.conf @@ -3,6 +3,10 @@ server { client_max_body_size 10M; listen 80; + listen 443 ssl; + + ssl_certificate /etc/nginx/ssl/server.crt; + ssl_certificate_key /etc/nginx/ssl/server.key; server_name _; root /var/www/html/public; diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md index fb86e65..fdb318a 100644 --- a/docs/DEPLOYMENT.md +++ b/docs/DEPLOYMENT.md @@ -75,13 +75,11 @@ NGINX_PORT=3000 # Error tracking (Sentry) ERROR_TRACKING_DSN=https://your-sentry-dsn -# Analytics -ANALYTICS_SCRIPT_URL=https://your-analytics.com/umami.js -ANALYTICS_WEBSITE_ID=your-website-id - # Mail list (Keila) -MAIL_LIST_URL=https://your-keila-instance.com -MAIL_LIST_API_KEY=your-api-key +MAIL_LIST_URL=https://api.brevo.com/v3 +MAIL_LIST_API_KEY=your-brevo-api-key +MAIL_LIST_IDS=1 # Comma-separated Brevo list IDs (optional) +MAIL_LIST_UPDATE_ENABLED=true # Allow updating existing contacts ``` ### 5. Reverse Proxy Setup @@ -179,8 +177,8 @@ ssh deploy@your-server-ip # Navigate to the project cd /var/www/webifycms.com -# Run the deploy script -bash scripts/deploy.sh +# Run the deploy script (requires DEPLOY_ENV=production) +DEPLOY_ENV=production bash scripts/deploy.sh ``` ## Rollback diff --git a/scripts/deploy.sh b/scripts/deploy.sh index bb2a9c9..efca70c 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -6,7 +6,8 @@ # It can also be run manually on the server. # # Usage: -# bash scripts/deploy.sh +# DEPLOY_ENV=production bash scripts/deploy.sh +# bash scripts/deploy.sh --force # Skip interactive confirmation (use with caution) # set -euo pipefail @@ -14,6 +15,46 @@ echo "==========================================" echo " WebifyCMS Deployment" echo "==========================================" +# Safety guardrails +FORCE=false +for arg in "$@"; do + case "$arg" in + --force|-f) + FORCE=true + ;; + *) + echo "Unknown argument: $arg" + echo "Usage: DEPLOY_ENV=production bash scripts/deploy.sh [--force]" + exit 1 + ;; + esac +done + +# Prevent accidental execution outside of production/server context +if [ "${DEPLOY_ENV:-}" != "production" ] && [ "$FORCE" = false ]; then + if [ -t 0 ]; then + echo "WARNING: This script performs destructive operations (docker compose down -v)." + echo "It is intended to run only on the production server or in CI." + echo "" + read -r -p "Type 'deploy' to confirm you want to proceed on this machine: " confirm + if [ "$confirm" != "deploy" ]; then + echo "Aborted." + exit 1 + fi + else + echo "ERROR: Refusing to run non-interactively without DEPLOY_ENV=production or --force." + echo "Set DEPLOY_ENV=production in the environment or pass --force if you know what you're doing." + exit 1 + fi +fi + +if [ "${DEPLOY_ENV:-}" = "production" ]; then + echo ">>> Running in PRODUCTION mode (DEPLOY_ENV=production)" +elif [ "$FORCE" = true ]; then + echo ">>> Running with --force (bypassing production environment check)" +fi +echo "" + # Configuration APP_NAME="${APP_ID:-webifycms}" diff --git a/src/Infrastructure/Contract/Service/UnsubscribeInterface.php b/src/Infrastructure/Contract/Service/UnsubscribeInterface.php new file mode 100644 index 0000000..cf6eb98 --- /dev/null +++ b/src/Infrastructure/Contract/Service/UnsubscribeInterface.php @@ -0,0 +1,29 @@ + + */ +declare(strict_types=1); + +namespace App\Infrastructure\Contract\Service; + +/** + * Unsubscribe service interface for newsletter deletion requests. + */ +interface UnsubscribeInterface +{ + /** + * Unsubscribe an email from the newsletter (request deletion). + * + * @param array{email: string} $data + * + * @return array{statusCode: int, success: bool, message: string} + */ + public function unsubscribe(array $data): array; +} \ No newline at end of file diff --git a/src/Infrastructure/Presentation/Api/Controller/Subscribe.php b/src/Infrastructure/Presentation/Api/Controller/Subscribe.php index d6d3334..c6465a5 100644 --- a/src/Infrastructure/Presentation/Api/Controller/Subscribe.php +++ b/src/Infrastructure/Presentation/Api/Controller/Subscribe.php @@ -46,10 +46,10 @@ public function __invoke(ServerRequestInterface $request, array $args = []): Res return $this->responseBuilder->error('Invalid request.', 403); } - // Parse JSON body - $data = $this->requestParser->getJsonBody($request); - // Let DTO handle validation - $model = SubscribeModel::createFromArray($data, $this->requestParser->getValidator()); + // Parse and normalize JSON body + $data = $this->requestParser->getJsonBody($request); + // Let DTO handle basic validations + $model = SubscribeModel::createFromArray($data, $this->requestParser->getValidator()); // Use the service $result = $this->service->subscribe($model->toArray()); $statusCode = $result['statusCode'] ?? 500; diff --git a/src/Infrastructure/Presentation/Api/Controller/Unsubscribe.php b/src/Infrastructure/Presentation/Api/Controller/Unsubscribe.php new file mode 100644 index 0000000..32cafbb --- /dev/null +++ b/src/Infrastructure/Presentation/Api/Controller/Unsubscribe.php @@ -0,0 +1,76 @@ + + */ +declare(strict_types=1); + +namespace App\Infrastructure\Presentation\Api\Controller; + +use App\Infrastructure\Contract\Service\UnsubscribeInterface; +use App\Infrastructure\Presentation\Api\Model\Unsubscribe as UnsubscribeModel; +use App\Infrastructure\Presentation\Api\{RequestParser, ResponseBuilder}; +use Psr\Http\Message\{ResponseInterface, ServerRequestInterface}; + +/** + * Unsubscribe controller handles newsletter deletion requests. + */ +final readonly class Unsubscribe +{ + /** + * The constructor. + */ + public function __construct( + private UnsubscribeInterface $service, + private RequestParser $requestParser, + private ResponseBuilder $responseBuilder, + ) {} + + /** + * Handles the unsubscribe request. + * + * @param array $args + */ + public function __invoke(ServerRequestInterface $request, array $args = []): ResponseInterface + { + // CSRF protection: verify custom header is present + $xRequestedWith = $request->getHeaderLine('X-Requested-With'); + + if ('XMLHttpRequest' !== $xRequestedWith) { + return $this->responseBuilder->error('Invalid request.', 403); + } + + // Parse and normalize JSON body + $data = $this->requestParser->getJsonBody($request); + // Let DTO handle basic validations + $model = UnsubscribeModel::createFromArray($data, $this->requestParser->getValidator()); + // Use the service + $result = $this->service->unsubscribe($model->toArray()); + $statusCode = $result['statusCode'] ?? 500; + + if (true === $result['success']) { + return $this->responseBuilder->ok(null, $result['message'] ?? 'Success'); + } + + if (400 === $statusCode) { + return $this->responseBuilder->error( + 'Validation failed', + 400, + $result['message'] ?? 'Validation failed.', + ); + } + + return $this->responseBuilder->error( + 'Deletion failed', + $statusCode, + $result['message'] ?? 'Deletion failed', + $result['errors'] ?? [] + ); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Presentation/Api/Model/Subscribe.php b/src/Infrastructure/Presentation/Api/Model/Subscribe.php index 3a1c89f..95b581b 100644 --- a/src/Infrastructure/Presentation/Api/Model/Subscribe.php +++ b/src/Infrastructure/Presentation/Api/Model/Subscribe.php @@ -43,8 +43,9 @@ public function __construct( */ public static function createFromArray(array $data, ValidatorInterface $validator): self { - $name = trim((string) ($data['name'] ?? '')); - $email = trim((string) ($data['email'] ?? '')); + $name = (string) ($data['name'] ?? ''); + $email = (string) ($data['email'] ?? ''); + $model = new self($name, $email); $violations = $validator->validate($model); diff --git a/src/Infrastructure/Presentation/Api/Model/Unsubscribe.php b/src/Infrastructure/Presentation/Api/Model/Unsubscribe.php new file mode 100644 index 0000000..c9af1ba --- /dev/null +++ b/src/Infrastructure/Presentation/Api/Model/Unsubscribe.php @@ -0,0 +1,71 @@ + + */ +declare(strict_types=1); + +namespace App\Infrastructure\Presentation\Api\Model; + +use App\Infrastructure\Exception\ValidationException; +use Symfony\Component\Validator\Constraints as Assert; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +/** + * Model for unsubscribe request. + */ +final readonly class Unsubscribe +{ + /** + * The constructor. + */ + public function __construct( + #[Assert\NotBlank(message: 'Valid email is required.')] + #[Assert\Email(message: 'Valid email is required.')] + public string $email + ) {} + + /** + * Create model from array and validate. + * + * @param array $data + * + * @throws ValidationException + */ + public static function createFromArray(array $data, ValidatorInterface $validator): self + { + $email = (string) ($data['email'] ?? ''); + + $model = new self($email); + $violations = $validator->validate($model); + + if (count($violations) > 0) { + foreach ($violations as $violation) { + throw ValidationException::forRequestValidationFailed( + (string) $violation->getMessage(), + $violation->getPropertyPath() + ); + } + } + + return $model; + } + + /** + * Convert to array for service. + * + * @return array{email: string} + */ + public function toArray(): array + { + return [ + 'email' => $this->email, + ]; + } +} \ No newline at end of file diff --git a/src/Infrastructure/Presentation/Api/RequestParser.php b/src/Infrastructure/Presentation/Api/RequestParser.php index 56d3c4e..edf8fb1 100644 --- a/src/Infrastructure/Presentation/Api/RequestParser.php +++ b/src/Infrastructure/Presentation/Api/RequestParser.php @@ -42,11 +42,13 @@ public function getValidator(): ValidatorInterface /** * Parse the JSON request body into an array. * + * @param bool $normalize Whether to apply common normalizations (e.g., trim string values) + * * @return array * * @throws ValidationException if body is an invalid JSON */ - public function getJsonBody(ServerRequestInterface $request): array + public function getJsonBody(ServerRequestInterface $request, bool $normalize = true): array { $body = (string) $request->getBody(); @@ -65,6 +67,34 @@ public function getJsonBody(ServerRequestInterface $request): array throw ValidationException::forInvalidJson($message); } + if ($normalize && is_array($data)) { + $data = $this->normalize($data); + } + + return $data; + } + + /** + * Apply common normalizations to request data. + * + * @param array $data + * + * @return array + */ + private function normalize(array $data): array + { + foreach ($data as $key => $value) { + if (is_string($value)) { + $data[$key] = mb_trim($value, " \t\n\r\0\x0B\xC2\xA0"); + + continue; + } + + if (is_array($value)) { + $data[$key] = $this->normalize($value); + } + } + return $data; } } diff --git a/src/Infrastructure/Presentation/Http/Controller/Page/Unsubscribe.php b/src/Infrastructure/Presentation/Http/Controller/Page/Unsubscribe.php new file mode 100644 index 0000000..47205a3 --- /dev/null +++ b/src/Infrastructure/Presentation/Http/Controller/Page/Unsubscribe.php @@ -0,0 +1,35 @@ + + */ +declare(strict_types=1); + +namespace App\Infrastructure\Presentation\Http\Controller\Page; + +use App\Infrastructure\Presentation\Http\Controller\Base; +use Psr\Http\Message\{ResponseInterface, ServerRequestInterface}; + +/** + * Unsubscribe controller renders the data deletion request page. + */ +final readonly class Unsubscribe extends Base +{ + /** + * {@inheritdoc} + */ + public function __invoke(ServerRequestInterface $request, array $args = []): ResponseInterface + { + $this->view->title = 'Request Data Deletion'; + $this->view->description = 'Request deletion of your personal data from our newsletter mailing list.'; + $this->view->canonical = $this->view->url('/unsubscribe'); + + return $this->render('unsubscribe'); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Service/Subscribe.php b/src/Infrastructure/Service/Subscribe.php index 7dcbda1..210602e 100644 --- a/src/Infrastructure/Service/Subscribe.php +++ b/src/Infrastructure/Service/Subscribe.php @@ -27,6 +27,11 @@ */ final readonly class Subscribe implements SubscribeInterface { + /** + * The characters to be stripped out. + */ + private const CHARACTERS_TO_BE_STRIPPED = " \t\n\r\0\x0B\xC2\xA0"; + /** * The constructor. */ @@ -42,8 +47,8 @@ public function __construct( */ public function subscribe(array $data): array { - $name = trim($data['name'] ?? ''); - $email = trim($data['email'] ?? ''); + $name = mb_trim($data['name'] ?? '', self::CHARACTERS_TO_BE_STRIPPED); + $email = mb_trim($data['email'] ?? '', self::CHARACTERS_TO_BE_STRIPPED); if ('' === $name || '' === $email) { return ['statusCode' => 422, 'success' => false, 'message' => 'Valid name and email are required.']; @@ -70,22 +75,109 @@ public function subscribe(array $data): array } $statusCode = $response->getStatusCode(); - $responseData = json_decode($response->getBody()->getContents(), true); + $responseBody = (string) $response->getBody(); + $responseData = json_decode($responseBody, true); + + return $this->handleResponse( + $statusCode, + is_array($responseData) ? $responseData : [], + (string) $request->getUri() + ); + } + /** + * Build API request for the mailing list. + * + * @param array $mailListConfig + * + * @throws ValidationException + */ + private function buildRequest(string $email, string $name, array $mailListConfig): RequestInterface + { + if ( + [] === $mailListConfig + || (!isset($mailListConfig['url']) || '' === $mailListConfig['url']) + || (!isset($mailListConfig['apiKey']) || '' === $mailListConfig['apiKey']) + ) { + throw ValidationException::forMissingConfig('Mail list configuration "key:mailList" is missing or empty.'); + } + + $url = rtrim((string) $mailListConfig['url'], '/'); + $listIds = array_values( + array_filter( + (array) ($mailListConfig['listIds'] ?? []), + static fn ($id) => is_int($id) && 0 < $id + ) + ); + $updateEnabled = filter_var($mailListConfig['updateEnabled'] ?? true, FILTER_VALIDATE_BOOLEAN); + $payload = [ + 'email' => $email, + 'attributes' => [ + 'FNAME' => $name, + ], + 'updateEnabled' => $updateEnabled, + ]; + + if ([] !== $listIds) { + $payload['listIds'] = $listIds; + } + + return $this->psr17Factory + ->createRequest('POST', $url . '/contacts') + ->withHeader('Content-Type', 'application/json') + ->withHeader('api-key', (string) $mailListConfig['apiKey']) + ->withHeader('accept', 'application/json') + ->withBody( + $this->psr17Factory->createStream((string) json_encode($payload)) + ) + ; + } + + /** + * Handle API response. + * + * @param array $responseData + * + * @return array{statusCode: int, success: bool, message: string} + */ + private function handleResponse(int $statusCode, array $responseData, string $endpoint): array + { if (200 <= $statusCode && 300 > $statusCode) { return ['statusCode' => 200, 'success' => true, 'message' => 'Thank you for subscribing!']; } + if (409 === $statusCode) { + return ['statusCode' => 409, 'success' => false, 'message' => 'This email is already subscribed.']; + } + if (400 === $statusCode) { - $errors = $responseData['errors'] ?? []; + $message = 'Validation failed.'; + + if ([] !== $responseData) { + $firstError = $responseData['errors'][0] ?? null; + if (is_array($firstError)) { + $message = $firstError['detail'] ?? $firstError['message'] ?? $message; + } + + if (is_string($responseData['message'] ?? null)) { + $message = $responseData['message']; + } + } - foreach ($errors as $error) { - if ('has already been taken' === ($error['detail'] ?? '')) { + if (is_string($message)) { + $lowerMessage = strtolower($message); + if ( + strpos($lowerMessage, 'already exists') !== false + || strpos($lowerMessage, 'already exist') !== false + || strpos($lowerMessage, 'duplicate') !== false + ) { return ['statusCode' => 409, 'success' => false, 'message' => 'This email is already subscribed.']; } } - $message = $errors[0]['detail'] ?? 'Validation failed.'; + if (!is_string($message)) { + $message = 'Validation failed.'; + } return ['statusCode' => 400, 'success' => false, 'message' => $message]; } @@ -93,49 +185,13 @@ public function subscribe(array $data): array $this->logger->error('Newsletter subscription failed', [ 'status' => $statusCode, 'response' => $responseData, - 'endpoint' => (string) $request->getUri(), + 'endpoint' => $endpoint, ]); return [ - 'statusCode' => $statusCode, + 'statusCode' => 502, 'success' => false, 'message' => 'Subscription service is temporarily unavailable. Please try again later.', ]; } - - /** - * Build API request for the mailing list. - * - * @param array $mailListConfig - * - * @throws ValidationException - */ - private function buildRequest(string $email, string $name, array $mailListConfig): RequestInterface - { - if ( - [] === $mailListConfig - || !array_key_exists('url', $mailListConfig) - || !array_key_exists('apiKey', $mailListConfig) - ) { - throw ValidationException::forMissingConfig('Mail list configuration "key:mailList" is missing or empty.'); - } - - return $this->psr17Factory - ->createRequest('POST', $mailListConfig['url'] . '/contacts') - ->withHeader('Content-Type', 'application/json') - ->withHeader( - 'Authorization', - 'Bearer ' . $mailListConfig['apiKey'] - ) - ->withBody( - $this->psr17Factory->createStream((string) json_encode([ - 'data' => [ - 'email' => $email, - 'first_name' => $name, - 'status' => 'active', - ], - ])) - ) - ; - } } diff --git a/src/Infrastructure/Service/Unsubscribe.php b/src/Infrastructure/Service/Unsubscribe.php new file mode 100644 index 0000000..75a1330 --- /dev/null +++ b/src/Infrastructure/Service/Unsubscribe.php @@ -0,0 +1,168 @@ + + */ +declare(strict_types=1); + +namespace App\Infrastructure\Service; + +use App\Infrastructure\Contract\HttpClientInterface; +use App\Infrastructure\Contract\Service\UnsubscribeInterface; +use App\Infrastructure\Exception\ValidationException; +use Nyholm\Psr7\Factory\Psr17Factory; +use Psr\Http\Client\ClientExceptionInterface; +use Psr\Http\Message\RequestInterface; +use Psr\Log\LoggerInterface; +use Webify\Base\Application\Service\ConfigInterface; + +/** + * Unsubscribe service handles newsletter deletion requests. + */ +final readonly class Unsubscribe implements UnsubscribeInterface +{ + /** + * The characters to be stripped out. + */ + private const CHARACTERS_TO_BE_STRIPPED = " \t\n\r\0\x0B\xC2\xA0"; + + /** + * The constructor. + */ + public function __construct( + private HttpClientInterface $httpClient, + private Psr17Factory $psr17Factory, + private ConfigInterface $config, + private LoggerInterface $logger, + ) {} + + /** + * {@inheritDoc} + */ + public function unsubscribe(array $data): array + { + $email = mb_trim($data['email'] ?? '', self::CHARACTERS_TO_BE_STRIPPED); + + if ('' === $email) { + return ['statusCode' => 422, 'success' => false, 'message' => 'Valid email is required.']; + } + + $request = $this->buildRequest($email, $this->config->get('mailList', [])); + + try { + $response = $this->httpClient + ->getClient([ + 'timeout' => 10, + 'http_errors' => false, + ]) + ->sendRequest($request) + ; + } catch (ClientExceptionInterface $exception) { + $this->logger->error('Newsletter deletion connection failed', ['error' => $exception->getMessage()]); + + return [ + 'statusCode' => 502, + 'success' => false, + 'message' => 'Unable to connect to the newsletter service.', + ]; + } + + $statusCode = $response->getStatusCode(); + $responseBody = (string) $response->getBody(); + $responseData = json_decode($responseBody, true); + + return $this->handleResponse( + $statusCode, + is_array($responseData) ? $responseData : [], + (string) $request->getUri() + ); + } + + /** + * Build API request for the mailing list contact deletion. + * + * @param array $mailListConfig + * + * @throws ValidationException + */ + private function buildRequest(string $email, array $mailListConfig): RequestInterface + { + if ( + [] === $mailListConfig + || (!isset($mailListConfig['url']) || '' === $mailListConfig['url']) + || (!isset($mailListConfig['apiKey']) || '' === $mailListConfig['apiKey']) + ) { + throw ValidationException::forMissingConfig('Mail list configuration "key:mailList" is missing or empty.'); + } + + $url = rtrim((string) $mailListConfig['url'], '/'); + + $encodedEmail = rawurlencode($email); + + return $this->psr17Factory + ->createRequest('DELETE', $url . '/contacts/' . $encodedEmail) + ->withHeader('Content-Type', 'application/json') + ->withHeader('api-key', (string) $mailListConfig['apiKey']) + ->withHeader('accept', 'application/json') + ; + } + + /** + * Handle API response. + * + * @param array $responseData + * + * @return array{statusCode: int, success: bool, message: string} + */ + private function handleResponse(int $statusCode, array $responseData, string $endpoint): array + { + // Success: 204 No Content is typical for DELETE, but 200 is also possible + if (200 <= $statusCode && 300 > $statusCode) { + return ['statusCode' => 200, 'success' => true, 'message' => 'Your data has been deleted. You will no longer receive updates.']; + } + + // 404 means the contact was not found (already deleted or never existed) + if (404 === $statusCode) { + return ['statusCode' => 200, 'success' => true, 'message' => 'Your data has been deleted. You will no longer receive updates.']; + } + + if (400 === $statusCode) { + $message = 'Validation failed.'; + + if ([] !== $responseData) { + $firstError = $responseData['errors'][0] ?? null; + if (is_array($firstError)) { + $message = $firstError['detail'] ?? $firstError['message'] ?? $message; + } + + if (is_string($responseData['message'] ?? null)) { + $message = $responseData['message']; + } + } + + if (!is_string($message)) { + $message = 'Validation failed.'; + } + + return ['statusCode' => 400, 'success' => false, 'message' => $message]; + } + + $this->logger->error('Newsletter deletion failed', [ + 'status' => $statusCode, + 'response' => $responseData, + 'endpoint' => $endpoint, + ]); + + return [ + 'statusCode' => 502, + 'success' => false, + 'message' => 'Deletion service is temporarily unavailable. Please try again later.', + ]; + } +} diff --git a/src/Infrastructure/Service/View.php b/src/Infrastructure/Service/View.php index 8c028b8..d520f2e 100644 --- a/src/Infrastructure/Service/View.php +++ b/src/Infrastructure/Service/View.php @@ -159,30 +159,6 @@ public function assetEntryHtml(string $entry): string return $this->vite->entryPointHtml($entry); } - /** - * Renders the analytics tracking script tag if configured. - * - * Outputs nothing when analytics is not configured (e.g. in development). - */ - public function renderAnalyticsScript(): void - { - /** @var string $scriptUrl */ - $scriptUrl = $this->config->get('analytics.scriptUrl', ''); - - /** @var string $websiteId */ - $websiteId = $this->config->get('analytics.websiteId', ''); - - if ('' === $scriptUrl || '' === $websiteId) { - return; - } - - echo sprintf( - '', - htmlspecialchars($websiteId, ENT_QUOTES), - htmlspecialchars($scriptUrl, ENT_QUOTES), - ); - } - /** * Returns the site URL for the given path. * diff --git a/templates/partials/footer.php b/templates/partials/footer.php index 2f6ad35..ebaca70 100644 --- a/templates/partials/footer.php +++ b/templates/partials/footer.php @@ -105,6 +105,5 @@ - renderAnalyticsScript(); ?> diff --git a/templates/privacy.php b/templates/privacy.php index ee8bf11..f18ef78 100644 --- a/templates/privacy.php +++ b/templates/privacy.php @@ -39,19 +39,13 @@
  • Your name
  • Your email address
  • -

    This data is stored until you unsubscribe. You can request deletion at any time by contacting mshifreen@gmail.com.

    +

    This data is stored until you request deletion. You can request deletion at any time via our Data Deletion Request page.

    -

    Analytics (Plausible Analytics)

    -

    We use Plausible Analytics, a privacy-focused analytics tool. Plausible:

    -
      -
    • Does not use cookies
    • -
    • Does not collect personal data
    • -
    • Tracks only anonymous usage statistics: pages visited, referrer, browser type, country
    • -
    • All data is processed in the EU and is fully GDPR, CCPA, and PECR compliant
    • -
    +

    Analytics

    +

    We do not use third-party analytics tools. Any usage data remains on the infrastructure you control.

    -

    Error Monitoring (GlitchTip)

    -

    We use GlitchTip to monitor application errors. When an error occurs, GlitchTip may collect:

    +

    Error Monitoring (Bugsink - self-hosted)

    +

    We use Bugsink to monitor application errors. When an error occurs, Bugsink may collect:

    • IP address (anonymized after 30 days)
    • Browser type and version
    • @@ -63,14 +57,12 @@

      How We Use Your Data

      We use the collected data to:

        -
      • Understand how visitors use our website
      • Identify and fix application errors
      • Improve our website and services

      Data Retention

        -
      • Analytics data: Retained indefinitely (anonymous, no personal data)
      • Error data: Automatically purged after 90 days
      @@ -78,16 +70,15 @@

      Depending on your jurisdiction, you may have the right to:

      • Access what data we hold about you
      • -
      • Request deletion of your data
      • +
      • Request deletion of your data via our Data Deletion Request page
      • Opt out of data collection
      -

      To exercise these rights, contact us at mshifreen@gmail.com.

      +

      To exercise other rights, contact us at info@webifycms.com.

      Third-Party Services

        -
      • Plausible Analytics — analytics (no cookies, EU-hosted)
      • -
      • GlitchTip — error monitoring
      • -
      • Keila — newsletter/mailing list (self-hosted, no third-party data sharing)
      • +
      • Bugsink — error monitoring (self-hosted)
      • +
      • Brevo — newsletter/mailing list
      • GitHub — code hosting and issue tracking
      @@ -95,7 +86,7 @@

      We may update this Privacy Policy from time to time. Changes will be posted on this page with an updated revision date.

      Contact

      -

      For questions about this Privacy Policy, contact us at mshifreen@gmail.com.

      +

      For questions about this Privacy Policy, contact us at info@webifycms.com.

      diff --git a/templates/unsubscribe.php b/templates/unsubscribe.php new file mode 100644 index 0000000..2de9ad7 --- /dev/null +++ b/templates/unsubscribe.php @@ -0,0 +1,73 @@ + +renderPartial('header'); ?> + +
      + + + +
      +
      Legal
      +

      Request Data Deletion

      +

      + Request deletion of your personal data from our newsletter mailing list. +

      +
      +
      + +
      +
      +
      +

      Request Data Deletion

      + +

      You can request deletion of your personal data (name and email address) from our newsletter mailing list at any time. This will permanently remove your information and you will no longer receive updates.

      + + + +
      +

      What data is deleted

      +
        +
      • Your name
      • +
      • Your email address
      • +
      • Any associated subscription preferences
      • +
      + +

      What happens after deletion

      +
        +
      • You will no longer receive any emails from WebifyCMS
      • +
      • Your data is permanently removed from our mailing list (Keila)
      • +
      • This action cannot be undone; you would need to subscribe again to rejoin
      • +
      +
      +
      +
      +
      + +renderPartial('footer'); ?> \ No newline at end of file From a68d4304f16dc299e1779938b67db0b7ba468fd7 Mon Sep 17 00:00:00 2001 From: Mohammed Shifreen Date: Sat, 24 Oct 2026 23:31:31 +0530 Subject: [PATCH 2/3] Fixed code format and composer packages updated. --- composer.lock | 1479 +++++++++-------- .../Contract/Service/UnsubscribeInterface.php | 2 +- .../Api/Controller/Unsubscribe.php | 2 +- .../Presentation/Api/Model/Unsubscribe.php | 2 +- .../Http/Controller/Page/Unsubscribe.php | 2 +- 5 files changed, 813 insertions(+), 674 deletions(-) diff --git a/composer.lock b/composer.lock index 0f40dfd..5e38811 100644 --- a/composer.lock +++ b/composer.lock @@ -8,23 +8,24 @@ "packages": [ { "name": "brick/math", - "version": "0.18.0", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad" + "reference": "2effe05d2177c451b86c6a073196a4034c02f211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/82944324d1c1bdb2c2618e89978d4e2ad78d69ad", - "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad", + "url": "https://api.github.com/repos/brick/math/zipball/2effe05d2177c451b86c6a073196a4034c02f211", + "reference": "2effe05d2177c451b86c6a073196a4034c02f211", "shasum": "" }, "require": { "php": "^8.2" }, "require-dev": { - "phpstan/phpstan": "2.1.22", + "phpstan/phpstan": "2.2.13", + "phpstan/phpstan-phpunit": "2.0.18", "phpunit/phpunit": "^11.5" }, "type": "library", @@ -55,7 +56,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.18.0" + "source": "https://github.com/brick/math/tree/1.0.0" }, "funding": [ { @@ -63,20 +64,20 @@ "type": "github" } ], - "time": "2026-06-14T18:21:03+00:00" + "time": "2026-09-12T10:28:18+00:00" }, { "name": "carbonphp/carbon-doctrine-types", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + "reference": "5fa5eacafd9ef47c8c6ab9143fc901ba0194d3dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/5fa5eacafd9ef47c8c6ab9143fc901ba0194d3dc", + "reference": "5fa5eacafd9ef47c8c6ab9143fc901ba0194d3dc", "shasum": "" }, "require": { @@ -91,6 +92,11 @@ "phpunit/phpunit": "^10.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" @@ -116,7 +122,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.1" }, "funding": [ { @@ -132,7 +138,7 @@ "type": "tidelift" } ], - "time": "2024-02-09T16:56:22+00:00" + "time": "2026-09-06T14:11:38+00:00" }, { "name": "dflydev/dot-access-data", @@ -301,24 +307,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.4", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" + "reference": "adccca3324eece92ca35463648c12b9e6293c05b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", - "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/adccca3324eece92ca35463648c12b9e6293c05b", + "reference": "adccca3324eece92ca35463648c12b9e6293c05b", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.5" + "phpoption/phpoption": "^1.10" }, "require-dev": { - "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" + "phpunit/phpunit": "^8.5.52 || ^9.6.34 || ^10.5.63 || ^11.5.55 || ^12.5.14" }, "type": "library", "autoload": { @@ -347,7 +353,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.2.0" }, "funding": [ { @@ -359,26 +365,26 @@ "type": "tidelift" } ], - "time": "2025-12-27T19:43:20+00:00" + "time": "2026-08-24T09:06:52+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.15.1", + "version": "7.16.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "61443dfb33c62f308ee8add20f45b4d6e4bf8d2f" + "reference": "ffb62ec787050ae4fa9449cdd6b80335db69bda2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/61443dfb33c62f308ee8add20f45b4d6e4bf8d2f", - "reference": "61443dfb33c62f308ee8add20f45b4d6e4bf8d2f", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ffb62ec787050ae4fa9449cdd6b80335db69bda2", + "reference": "ffb62ec787050ae4fa9449cdd6b80335db69bda2", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.5.1", - "guzzlehttp/psr7": "^2.13", + "guzzlehttp/promises": "^2.6", + "guzzlehttp/psr7": "^2.13.2", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.5 || ^3.0", @@ -471,7 +477,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.15.1" + "source": "https://github.com/guzzle/guzzle/tree/7.16.0" }, "funding": [ { @@ -487,20 +493,20 @@ "type": "tidelift" } ], - "time": "2026-07-18T11:23:11+00:00" + "time": "2026-10-18T13:38:36+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.5.1", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29" + "reference": "3d88c829bd5f13d13847b39067dbf09a60af2154" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29", - "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29", + "url": "https://api.github.com/repos/guzzle/promises/zipball/3d88c829bd5f13d13847b39067dbf09a60af2154", + "reference": "3d88c829bd5f13d13847b39067dbf09a60af2154", "shasum": "" }, "require": { @@ -555,7 +561,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.5.1" + "source": "https://github.com/guzzle/promises/tree/2.6.0" }, "funding": [ { @@ -571,20 +577,20 @@ "type": "tidelift" } ], - "time": "2026-07-08T15:48:39+00:00" + "time": "2026-10-18T12:46:59+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.13.0", + "version": "2.13.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4" + "reference": "adee536f95101929f262b8c59e8a61472f347d58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/dad89620b7a6edb60c15858442eb2e408b45d8f4", - "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/adee536f95101929f262b8c59e8a61472f347d58", + "reference": "adee536f95101929f262b8c59e8a61472f347d58", "shasum": "" }, "require": { @@ -674,7 +680,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.13.0" + "source": "https://github.com/guzzle/psr7/tree/2.13.2" }, "funding": [ { @@ -690,20 +696,20 @@ "type": "tidelift" } ], - "time": "2026-07-16T22:23:49+00:00" + "time": "2026-10-17T23:49:46+00:00" }, { "name": "illuminate/collections", - "version": "v13.20.0", + "version": "v13.38.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "b58840a1bbbba5cb5895760bd806808fdfdd7e51" + "reference": "aa098a584e390e9a066edf02fd1c6976c933fb23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/b58840a1bbbba5cb5895760bd806808fdfdd7e51", - "reference": "b58840a1bbbba5cb5895760bd806808fdfdd7e51", + "url": "https://api.github.com/repos/illuminate/collections/zipball/aa098a584e390e9a066edf02fd1c6976c933fb23", + "reference": "aa098a584e390e9a066edf02fd1c6976c933fb23", "shasum": "" }, "require": { @@ -750,20 +756,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-07-06T15:30:07+00:00" + "time": "2026-10-19T14:11:57+00:00" }, { "name": "illuminate/conditionable", - "version": "v13.20.0", + "version": "v13.38.0", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", - "reference": "7f1ef52d9a346f829421b296adfb7644a951b216" + "reference": "d5f1816d594dd76225352fa44ef358162f05334b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/7f1ef52d9a346f829421b296adfb7644a951b216", - "reference": "7f1ef52d9a346f829421b296adfb7644a951b216", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/d5f1816d594dd76225352fa44ef358162f05334b", + "reference": "d5f1816d594dd76225352fa44ef358162f05334b", "shasum": "" }, "require": { @@ -796,20 +802,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-02-25T16:07:55+00:00" + "time": "2026-10-06T02:42:44+00:00" }, { "name": "illuminate/container", - "version": "v13.20.0", + "version": "v13.38.0", "source": { "type": "git", "url": "https://github.com/illuminate/container.git", - "reference": "50a24585e90cfdede3b241234fb29c803005022c" + "reference": "573f22dcaeec1748a57d4f47b4e7147845a5112a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/50a24585e90cfdede3b241234fb29c803005022c", - "reference": "50a24585e90cfdede3b241234fb29c803005022c", + "url": "https://api.github.com/repos/illuminate/container/zipball/573f22dcaeec1748a57d4f47b4e7147845a5112a", + "reference": "573f22dcaeec1748a57d4f47b4e7147845a5112a", "shasum": "" }, "require": { @@ -858,20 +864,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-06-10T13:09:02+00:00" + "time": "2026-10-13T13:06:12+00:00" }, { "name": "illuminate/contracts", - "version": "v13.20.0", + "version": "v13.38.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "33134905d9762a3a684bff8f5a52d59987fc3135" + "reference": "1d2b764e1b11d56bbe4a987fcc312f84eb370c65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/33134905d9762a3a684bff8f5a52d59987fc3135", - "reference": "33134905d9762a3a684bff8f5a52d59987fc3135", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/1d2b764e1b11d56bbe4a987fcc312f84eb370c65", + "reference": "1d2b764e1b11d56bbe4a987fcc312f84eb370c65", "shasum": "" }, "require": { @@ -906,26 +912,27 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-07-07T23:44:43+00:00" + "time": "2026-10-08T22:29:36+00:00" }, { "name": "illuminate/database", - "version": "v13.20.0", + "version": "v13.38.0", "source": { "type": "git", "url": "https://github.com/illuminate/database.git", - "reference": "522fc5f42539aaf6d1f0370e9c39ba4e3ad8d220" + "reference": "add3b4602c77c38edbee26be9ab55e7eec621182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/522fc5f42539aaf6d1f0370e9c39ba4e3ad8d220", - "reference": "522fc5f42539aaf6d1f0370e9c39ba4e3ad8d220", + "url": "https://api.github.com/repos/illuminate/database/zipball/add3b4602c77c38edbee26be9ab55e7eec621182", + "reference": "add3b4602c77c38edbee26be9ab55e7eec621182", "shasum": "" }, "require": { - "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18", + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", "ext-pdo": "*", "illuminate/collections": "^13.0", + "illuminate/conditionable": "^13.0", "illuminate/container": "^13.0", "illuminate/contracts": "^13.0", "illuminate/macroable": "^13.0", @@ -979,20 +986,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-07-13T16:25:28+00:00" + "time": "2026-10-19T14:22:29+00:00" }, { "name": "illuminate/macroable", - "version": "v13.20.0", + "version": "v13.38.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", - "reference": "59b5b5f3cf290a91db8cf6cd3d35ff56978bc057" + "reference": "819da7c238593c2a6f64f8cc09fb9526928736d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/59b5b5f3cf290a91db8cf6cd3d35ff56978bc057", - "reference": "59b5b5f3cf290a91db8cf6cd3d35ff56978bc057", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/819da7c238593c2a6f64f8cc09fb9526928736d2", + "reference": "819da7c238593c2a6f64f8cc09fb9526928736d2", "shasum": "" }, "require": { @@ -1025,20 +1032,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-04-29T09:35:06+00:00" + "time": "2026-10-06T02:42:44+00:00" }, { "name": "illuminate/reflection", - "version": "v13.20.0", + "version": "v13.38.0", "source": { "type": "git", "url": "https://github.com/illuminate/reflection.git", - "reference": "178cdb5eb08c5369ae6b71518e557bed68e74577" + "reference": "a4e899496e3c4952fe5082f8d71512be7177add8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/reflection/zipball/178cdb5eb08c5369ae6b71518e557bed68e74577", - "reference": "178cdb5eb08c5369ae6b71518e557bed68e74577", + "url": "https://api.github.com/repos/illuminate/reflection/zipball/a4e899496e3c4952fe5082f8d71512be7177add8", + "reference": "a4e899496e3c4952fe5082f8d71512be7177add8", "shasum": "" }, "require": { @@ -1076,20 +1083,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-06-18T15:47:27+00:00" + "time": "2026-10-06T02:42:44+00:00" }, { "name": "illuminate/support", - "version": "v13.20.0", + "version": "v13.38.0", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "2852f5378f185116034c091c049658760c691e1e" + "reference": "60bec529f7ddf433ad649f2df95e5e55c685fe47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/2852f5378f185116034c091c049658760c691e1e", - "reference": "2852f5378f185116034c091c049658760c691e1e", + "url": "https://api.github.com/repos/illuminate/support/zipball/60bec529f7ddf433ad649f2df95e5e55c685fe47", + "reference": "60bec529f7ddf433ad649f2df95e5e55c685fe47", "shasum": "" }, "require": { @@ -1155,7 +1162,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-07-13T15:58:32+00:00" + "time": "2026-10-19T14:12:28+00:00" }, { "name": "jean85/pretty-package-versions", @@ -1219,20 +1226,20 @@ }, { "name": "laminas/laminas-httphandlerrunner", - "version": "2.13.0", + "version": "2.14.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-httphandlerrunner.git", - "reference": "181eaeeb838ad3d80fbbcfb0657a46bc212bbd4e" + "reference": "14d5182a4ba180c998dfbba9d19f9a70337c02b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/181eaeeb838ad3d80fbbcfb0657a46bc212bbd4e", - "reference": "181eaeeb838ad3d80fbbcfb0657a46bc212bbd4e", + "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/14d5182a4ba180c998dfbba9d19f9a70337c02b4", + "reference": "14d5182a4ba180c998dfbba9d19f9a70337c02b4", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", "psr/http-message": "^1.0 || ^2.0", "psr/http-message-implementation": "^1.0 || ^2.0", "psr/http-server-handler": "^1.0" @@ -1278,24 +1285,24 @@ }, "funding": [ { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" + "url": "https://crowdfunding.linuxfoundation.org/initiatives/laminas-project", + "type": "custom" } ], - "time": "2025-10-12T20:58:29+00:00" + "time": "2026-09-21T10:14:52+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.13", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce" + "reference": "2d5869a838bbcf37e0d8b0568fc41914e81374b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce", - "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/2d5869a838bbcf37e0d8b0568fc41914e81374b5", + "reference": "2d5869a838bbcf37e0d8b0568fc41914e81374b5", "shasum": "" }, "require": { @@ -1343,20 +1350,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2026-04-16T14:03:50+00:00" + "time": "2026-09-22T14:32:34+00:00" }, { "name": "league/commonmark", - "version": "2.8.3", + "version": "2.10.4", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "1902f60f984235023acbe03db6ad614a37b3c3e7" + "reference": "40821b7606d8d946bac57dbd2290076c722e3a65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/1902f60f984235023acbe03db6ad614a37b3c3e7", - "reference": "1902f60f984235023acbe03db6ad614a37b3c3e7", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/40821b7606d8d946bac57dbd2290076c722e3a65", + "reference": "40821b7606d8d946bac57dbd2290076c722e3a65", "shasum": "" }, "require": { @@ -1393,7 +1400,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.9-dev" + "dev-main": "2.11-dev" } }, "autoload": { @@ -1450,7 +1457,7 @@ "type": "tidelift" } ], - "time": "2026-07-12T15:29:16+00:00" + "time": "2026-10-17T19:59:50+00:00" }, { "name": "league/config", @@ -1685,16 +1692,16 @@ }, { "name": "monolog/monolog", - "version": "3.10.0", + "version": "3.12.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", - "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7059e4c691d05ea1222b5124bed0f961be46e15", + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15", "shasum": "" }, "require": { @@ -1720,6 +1727,7 @@ "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", + "psr/clock": "^1.0", "rollbar/rollbar": "^4.0", "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", @@ -1738,6 +1746,7 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "psr/clock": "Required to pass a clock to the Logger and control the timestamp of log records", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, @@ -1772,7 +1781,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + "source": "https://github.com/Seldaek/monolog/tree/3.12.1" }, "funding": [ { @@ -1784,20 +1793,20 @@ "type": "tidelift" } ], - "time": "2026-01-02T08:56:05+00:00" + "time": "2026-09-29T19:21:12+00:00" }, { "name": "nesbot/carbon", - "version": "3.13.1", + "version": "3.15.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "2937ad3d1d2c506fd2bc97d571438a95641f44e2" + "reference": "217d38553209bdb44e01590d9e9a2e4df8354cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/2937ad3d1d2c506fd2bc97d571438a95641f44e2", - "reference": "2937ad3d1d2c506fd2bc97d571438a95641f44e2", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/217d38553209bdb44e01590d9e9a2e4df8354cce", + "reference": "217d38553209bdb44e01590d9e9a2e4df8354cce", "shasum": "" }, "require": { @@ -1807,6 +1816,7 @@ "psr/clock": "^1.0", "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-time": "^1.0", "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" }, "provide": { @@ -1817,7 +1827,7 @@ "doctrine/orm": "^2.15.2 || ^3.0", "friendsofphp/php-cs-fixer": "^v3.87.1", "kylekatarnls/multi-tester": "^2.5.3", - "phpmd/phpmd": "^2.15.0", + "phpmd/phpmd": "^3.0@dev", "phpstan/extension-installer": "^1.4.3", "phpstan/phpstan": "^2.1.22", "phpunit/phpunit": "^10.5.53", @@ -1889,37 +1899,37 @@ "type": "tidelift" } ], - "time": "2026-07-09T18:23:49+00:00" + "time": "2026-10-18T18:27:53+00:00" }, { "name": "nette/schema", - "version": "v1.3.5", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" + "reference": "af9fa8a86bfca9b02b10346220db26e62ef942ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", - "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", + "url": "https://api.github.com/repos/nette/schema/zipball/af9fa8a86bfca9b02b10346220db26e62ef942ec", + "reference": "af9fa8a86bfca9b02b10346220db26e62ef942ec", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.5" + "php": "8.1 - 8.6" }, "require-dev": { - "nette/phpstan-rules": "^1.0", + "nette/phpstan-rules": "^1.0.7", "nette/tester": "^2.6", "phpstan/extension-installer": "^1.4@stable", - "phpstan/phpstan": "^2.1.39@stable", + "phpstan/phpstan": "^2.3@stable", "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -1940,40 +1950,40 @@ { "name": "David Grudl", "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" } ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", + "description": "📐 Nette Schema: validates and normalizes data such as configuration or API input against a schema described in a few readable lines of PHP, with precise error messages.", + "homepage": "https://doc.nette.org/schema", "keywords": [ - "config", - "nette" + "configuration", + "data validation", + "nette", + "normalization", + "schema", + "validation" ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.5" + "source": "https://github.com/nette/schema/tree/v1.4.0" }, - "time": "2026-02-23T03:47:12+00:00" + "time": "2026-10-22T02:12:50+00:00" }, { "name": "nette/utils", - "version": "v4.1.5", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0" + "reference": "6bf24518accf32cf845bca305e0b92078700fd01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/b043439dbdf954e6c28b5ea7e34b0100f83165e0", - "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0", + "url": "https://api.github.com/repos/nette/utils/zipball/6bf24518accf32cf845bca305e0b92078700fd01", + "reference": "6bf24518accf32cf845bca305e0b92078700fd01", "shasum": "" }, "require": { - "php": "8.2 - 8.5" + "php": "8.2 - 8.6" }, "conflict": { "nette/finder": "<3", @@ -2045,9 +2055,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.1.5" + "source": "https://github.com/nette/utils/tree/v4.1.6" }, - "time": "2026-07-17T23:02:45+00:00" + "time": "2026-10-20T17:07:56+00:00" }, { "name": "nikic/fast-route", @@ -2373,16 +2383,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.5", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + "reference": "67b192b6a42ec03944b972d6e633ddec78ad2c6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", - "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/67b192b6a42ec03944b972d6e633ddec78ad2c6d", + "reference": "67b192b6a42ec03944b972d6e633ddec78ad2c6d", "shasum": "" }, "require": { @@ -2390,7 +2400,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + "phpunit/phpunit": "^8.5.54 || ^9.6.36 || ^10.5.64 || ^11.5.56 || ^12.5.33" }, "type": "library", "extra": { @@ -2432,7 +2442,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" + "source": "https://github.com/schmittjoh/php-option/tree/1.10.0" }, "funding": [ { @@ -2444,7 +2454,7 @@ "type": "tidelift" } ], - "time": "2025-12-27T19:41:33+00:00" + "time": "2026-08-24T00:54:40+00:00" }, { "name": "psr/cache", @@ -3066,23 +3076,23 @@ }, { "name": "sentry/sentry", - "version": "4.29.0", + "version": "4.34.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "d732a4da195f231cedb2a2a78ae16dd73082afa3" + "reference": "3d8f4e56becb10ede64e2ac6f8077f6434715461" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/d732a4da195f231cedb2a2a78ae16dd73082afa3", - "reference": "d732a4da195f231cedb2a2a78ae16dd73082afa3", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/3d8f4e56becb10ede64e2ac6f8077f6434715461", + "reference": "3d8f4e56becb10ede64e2ac6f8077f6434715461", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "guzzlehttp/psr7": "^1.8.4|^2.1.1|^3.0.0", "jean85/pretty-package-versions": "^1.5|^2.0.4", "php": "^7.2|^8.0", "psr/log": "^1.0|^2.0|^3.0", @@ -3094,14 +3104,17 @@ "require-dev": { "carthage-software/mago": "1.30.0", "friendsofphp/php-cs-fixer": "^3.4", - "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/guzzle": "^7.0|^8.0", + "guzzlehttp/promises": "^2.0.3|^3.0.0", "monolog/monolog": "^1.6|^2.0|^3.0", "nyholm/psr7": "^1.8", - "open-telemetry/api": "^1.0", - "open-telemetry/exporter-otlp": "^1.0", - "open-telemetry/sdk": "^1.0", + "open-telemetry/api": "^1.1", + "open-telemetry/context": "^1.1", + "open-telemetry/exporter-otlp": "^1.1", + "open-telemetry/gen-otlp-protobuf": "^1.2.1", + "open-telemetry/sdk": "^1.1", "open-telemetry/sem-conv": "^1.27", - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^2.2", "phpunit/phpunit": "^8.5.52|^9.6.34", "spiral/roadrunner-http": "^3.6", "spiral/roadrunner-worker": "^3.6" @@ -3144,7 +3157,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.29.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.34.0" }, "funding": [ { @@ -3156,20 +3169,20 @@ "type": "custom" } ], - "time": "2026-06-29T14:47:44+00:00" + "time": "2026-10-08T11:25:58+00:00" }, { "name": "symfony/cache", - "version": "v8.1.1", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "c14decc1b0755b1e8ab6babeef56e1880348e817" + "reference": "151eb8001bb873afc9dce0fdc7cd077250f3db10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/c14decc1b0755b1e8ab6babeef56e1880348e817", - "reference": "c14decc1b0755b1e8ab6babeef56e1880348e817", + "url": "https://api.github.com/repos/symfony/cache/zipball/151eb8001bb873afc9dce0fdc7cd077250f3db10", + "reference": "151eb8001bb873afc9dce0fdc7cd077250f3db10", "shasum": "" }, "require": { @@ -3190,7 +3203,7 @@ "symfony/cache-implementation": "1.1|2.0|3.0" }, "require-dev": { - "cache/integration-tests": "dev-master", + "cache/integration-tests": "^1.0.3", "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", @@ -3235,7 +3248,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v8.1.1" + "source": "https://github.com/symfony/cache/tree/v8.1.9" }, "funding": [ { @@ -3255,7 +3268,7 @@ "type": "tidelift" } ], - "time": "2026-06-17T15:04:37+00:00" + "time": "2026-10-12T13:05:24+00:00" }, { "name": "symfony/cache-contracts", @@ -3339,16 +3352,16 @@ }, { "name": "symfony/clock", - "version": "v8.1.0", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6" + "reference": "945ea3b64d6da9c1c2c354fe5c07b27455df6442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/701ef4de9705d6c32292ebee5e8044094a09fbf6", - "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6", + "url": "https://api.github.com/repos/symfony/clock/zipball/945ea3b64d6da9c1c2c354fe5c07b27455df6442", + "reference": "945ea3b64d6da9c1c2c354fe5c07b27455df6442", "shasum": "" }, "require": { @@ -3392,7 +3405,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v8.1.0" + "source": "https://github.com/symfony/clock/tree/v8.1.9" }, "funding": [ { @@ -3412,20 +3425,20 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-10-12T14:32:04+00:00" }, { "name": "symfony/console", - "version": "v8.1.1", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "b711a8ab808b6c074c6b8caef70d0fd8d6b6d07d" + "reference": "630e74196a2635ec0f06c12bd3fb47cfedf85157" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/b711a8ab808b6c074c6b8caef70d0fd8d6b6d07d", - "reference": "b711a8ab808b6c074c6b8caef70d0fd8d6b6d07d", + "url": "https://api.github.com/repos/symfony/console/zipball/630e74196a2635ec0f06c12bd3fb47cfedf85157", + "reference": "630e74196a2635ec0f06c12bd3fb47cfedf85157", "shasum": "" }, "require": { @@ -3492,7 +3505,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v8.1.1" + "source": "https://github.com/symfony/console/tree/v8.1.9" }, "funding": [ { @@ -3512,7 +3525,7 @@ "type": "tidelift" } ], - "time": "2026-06-16T12:55:20+00:00" + "time": "2026-10-12T19:11:16+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3741,16 +3754,16 @@ }, { "name": "symfony/polyfill-deepclone", - "version": "v1.40.0", + "version": "v1.43.2", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-deepclone.git", - "reference": "dca4ccba5f360070b574414dce4c1e7a559844fa" + "reference": "82274308b59f6e96f53a3fb37fc40877d843e5a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-deepclone/zipball/dca4ccba5f360070b574414dce4c1e7a559844fa", - "reference": "dca4ccba5f360070b574414dce4c1e7a559844fa", + "url": "https://api.github.com/repos/symfony/polyfill-deepclone/zipball/82274308b59f6e96f53a3fb37fc40877d843e5a5", + "reference": "82274308b59f6e96f53a3fb37fc40877d843e5a5", "shasum": "" }, "require": { @@ -3804,7 +3817,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-deepclone/tree/v1.40.0" + "source": "https://github.com/symfony/polyfill-deepclone/tree/v1.43.2" }, "funding": [ { @@ -3824,20 +3837,20 @@ "type": "tidelift" } ], - "time": "2026-06-12T07:27:17+00:00" + "time": "2026-10-14T07:17:09+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.38.1", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + "reference": "5cac8f4db97208823aa353f59a01faad2da52c75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5cac8f4db97208823aa353f59a01faad2da52c75", + "reference": "5cac8f4db97208823aa353f59a01faad2da52c75", "shasum": "" }, "require": { @@ -3886,7 +3899,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.43.0" }, "funding": [ { @@ -3906,20 +3919,20 @@ "type": "tidelift" } ], - "time": "2026-05-26T05:58:03+00:00" + "time": "2026-09-25T15:46:47+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.38.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/ebd57ccc7edb93d632e184efbe7693d2517bab3b", + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b", "shasum": "" }, "require": { @@ -3971,7 +3984,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.43.0" }, "funding": [ { @@ -3991,20 +4004,20 @@ "type": "tidelift" } ], - "time": "2026-05-25T13:48:31+00:00" + "time": "2026-09-23T22:02:09+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.38.2", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", "shasum": "" }, "require": { @@ -4056,7 +4069,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0" }, "funding": [ { @@ -4076,20 +4089,20 @@ "type": "tidelift" } ], - "time": "2026-05-27T06:59:30+00:00" + "time": "2026-09-24T15:19:04+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.37.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74", + "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74", "shasum": "" }, "require": { @@ -4140,7 +4153,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.43.0" }, "funding": [ { @@ -4160,20 +4173,20 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-09-25T15:50:05+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.38.2", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8" + "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/796a26abb75ce49f3a84433cd81bf1009d73d5f8", - "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/80ccff923a8d61f73ebe9da0aa94e25232f004ce", + "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce", "shasum": "" }, "require": { @@ -4220,7 +4233,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.2" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.43.0" }, "funding": [ { @@ -4240,20 +4253,20 @@ "type": "tidelift" } ], - "time": "2026-05-27T06:51:48+00:00" + "time": "2026-09-25T15:50:05+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.38.1", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/22c6548499cbe5c5bb072fc0c42312dff062a015", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015", "shasum": "" }, "require": { @@ -4300,7 +4313,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.43.0" }, "funding": [ { @@ -4320,20 +4333,20 @@ "type": "tidelift" } ], - "time": "2026-05-26T12:51:13+00:00" + "time": "2026-09-23T22:01:09+00:00" }, { "name": "symfony/polyfill-php85", - "version": "v1.38.1", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", - "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6", "shasum": "" }, "require": { @@ -4380,7 +4393,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.43.0" }, "funding": [ { @@ -4400,20 +4413,20 @@ "type": "tidelift" } ], - "time": "2026-05-26T02:25:22+00:00" + "time": "2026-09-25T15:46:47+00:00" }, { "name": "symfony/polyfill-php86", - "version": "v1.38.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php86.git", - "reference": "fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad" + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad", - "reference": "fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/8840df45b24f33a49dc419fa18dc0057231ae1d8", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8", "shasum": "" }, "require": { @@ -4460,7 +4473,90 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php86/tree/v1.38.0" + "source": "https://github.com/symfony/polyfill-php86/tree/v1.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:46:47+00:00" + }, + { + "name": "symfony/polyfill-time", + "version": "v1.42.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-time.git", + "reference": "ac9f1ed802dd58f37e720388130c088434aa09fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-time/zipball/ac9f1ed802dd58f37e720388130c088434aa09fc", + "reference": "ac9f1ed802dd58f37e720388130c088434aa09fc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Time\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Philippe Nyamagana Butera", + "email": "nyamsprod@gmail.com" + }, + { + "name": "Tim Düsterhus", + "email": "tim@tideways-gmbh.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Time API added to PHP 8.6", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "duration", + "polyfill", + "portable", + "shim", + "time" + ], + "support": { + "source": "https://github.com/symfony/polyfill-time/tree/v1.42.0" }, "funding": [ { @@ -4480,20 +4576,20 @@ "type": "tidelift" } ], - "time": "2026-05-25T11:52:35+00:00" + "time": "2026-08-07T13:08:13+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.37.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + "reference": "b23ff8245cc5c4479ea2be3d0132d2e6dd433993" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/b23ff8245cc5c4479ea2be3d0132d2e6dd433993", + "reference": "b23ff8245cc5c4479ea2be3d0132d2e6dd433993", "shasum": "" }, "require": { @@ -4543,7 +4639,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.43.0" }, "funding": [ { @@ -4563,20 +4659,20 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-09-24T05:20:52+00:00" }, { "name": "symfony/property-access", - "version": "v7.4.8", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc" + "reference": "c3dce76a6697c6428f7d80d5cd1cf0aa5d9679f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", - "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", + "url": "https://api.github.com/repos/symfony/property-access/zipball/c3dce76a6697c6428f7d80d5cd1cf0aa5d9679f3", + "reference": "c3dce76a6697c6428f7d80d5cd1cf0aa5d9679f3", "shasum": "" }, "require": { @@ -4624,7 +4720,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.4.8" + "source": "https://github.com/symfony/property-access/tree/v7.4.16" }, "funding": [ { @@ -4644,20 +4740,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-07-30T12:37:26+00:00" }, { "name": "symfony/property-info", - "version": "v7.4.8", + "version": "v7.4.20", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "ac5e82528b986c4f7cfccbf7764b5d2e824d6175" + "reference": "d24c4c810b1285c5d8d77c6fd7b25e714479bd48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/ac5e82528b986c4f7cfccbf7764b5d2e824d6175", - "reference": "ac5e82528b986c4f7cfccbf7764b5d2e824d6175", + "url": "https://api.github.com/repos/symfony/property-info/zipball/d24c4c810b1285c5d8d77c6fd7b25e714479bd48", + "reference": "d24c4c810b1285c5d8d77c6fd7b25e714479bd48", "shasum": "" }, "require": { @@ -4714,7 +4810,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.4.8" + "source": "https://github.com/symfony/property-info/tree/v7.4.20" }, "funding": [ { @@ -4734,20 +4830,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-09-28T09:47:41+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.7.1", + "version": "v3.7.3", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0" + "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0", - "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", + "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", "shasum": "" }, "require": { @@ -4801,7 +4897,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.7.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.7.3" }, "funding": [ { @@ -4821,20 +4917,20 @@ "type": "tidelift" } ], - "time": "2026-06-16T09:55:08+00:00" + "time": "2026-07-27T15:39:01+00:00" }, { "name": "symfony/string", - "version": "v8.1.0", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9" + "reference": "07fb208558f941eab50ec49c89c2a6a93fb11f01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9", - "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9", + "url": "https://api.github.com/repos/symfony/string/zipball/07fb208558f941eab50ec49c89c2a6a93fb11f01", + "reference": "07fb208558f941eab50ec49c89c2a6a93fb11f01", "shasum": "" }, "require": { @@ -4891,7 +4987,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.1.0" + "source": "https://github.com/symfony/string/tree/v8.1.9" }, "funding": [ { @@ -4911,20 +5007,20 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-10-03T15:16:03+00:00" }, { "name": "symfony/translation", - "version": "v8.1.1", + "version": "v8.1.5", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "342b4218630dc2cf284cedcb2080c80b13404014" + "reference": "d9e1caba0d6b6f9a26710af8a2f88d37f001215a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/342b4218630dc2cf284cedcb2080c80b13404014", - "reference": "342b4218630dc2cf284cedcb2080c80b13404014", + "url": "https://api.github.com/repos/symfony/translation/zipball/d9e1caba0d6b6f9a26710af8a2f88d37f001215a", + "reference": "d9e1caba0d6b6f9a26710af8a2f88d37f001215a", "shasum": "" }, "require": { @@ -4984,7 +5080,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v8.1.1" + "source": "https://github.com/symfony/translation/tree/v8.1.5" }, "funding": [ { @@ -5004,7 +5100,7 @@ "type": "tidelift" } ], - "time": "2026-06-06T11:11:44+00:00" + "time": "2026-08-21T17:47:34+00:00" }, { "name": "symfony/translation-contracts", @@ -5090,16 +5186,16 @@ }, { "name": "symfony/type-info", - "version": "v8.1.0", + "version": "v8.1.8", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7" + "reference": "18e1d891f0b8776141f281f7b6f5e67e4df9d9cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7", - "reference": "9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7", + "url": "https://api.github.com/repos/symfony/type-info/zipball/18e1d891f0b8776141f281f7b6f5e67e4df9d9cd", + "reference": "18e1d891f0b8776141f281f7b6f5e67e4df9d9cd", "shasum": "" }, "require": { @@ -5148,7 +5244,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v8.1.0" + "source": "https://github.com/symfony/type-info/tree/v8.1.8" }, "funding": [ { @@ -5168,20 +5264,20 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-09-28T19:13:15+00:00" }, { "name": "symfony/uid", - "version": "v8.1.0", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "7393f157a55f7e70a4de0334435c55a5a8fe749a" + "reference": "cb487cf30380f0b0b090973bb9c0588193c06685" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/7393f157a55f7e70a4de0334435c55a5a8fe749a", - "reference": "7393f157a55f7e70a4de0334435c55a5a8fe749a", + "url": "https://api.github.com/repos/symfony/uid/zipball/cb487cf30380f0b0b090973bb9c0588193c06685", + "reference": "cb487cf30380f0b0b090973bb9c0588193c06685", "shasum": "" }, "require": { @@ -5226,7 +5322,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v8.1.0" + "source": "https://github.com/symfony/uid/tree/v8.1.9" }, "funding": [ { @@ -5246,20 +5342,20 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-10-12T14:32:04+00:00" }, { "name": "symfony/validator", - "version": "v7.4.14", + "version": "v7.4.21", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "306d904336166d001751759351d40d5e82312596" + "reference": "6c9b169bf3a1e46b2f2edc1c47be36c3b879d793" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/306d904336166d001751759351d40d5e82312596", - "reference": "306d904336166d001751759351d40d5e82312596", + "url": "https://api.github.com/repos/symfony/validator/zipball/6c9b169bf3a1e46b2f2edc1c47be36c3b879d793", + "reference": "6c9b169bf3a1e46b2f2edc1c47be36c3b879d793", "shasum": "" }, "require": { @@ -5330,7 +5426,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.4.14" + "source": "https://github.com/symfony/validator/tree/v7.4.21" }, "funding": [ { @@ -5350,26 +5446,26 @@ "type": "tidelift" } ], - "time": "2026-06-27T06:16:12+00:00" + "time": "2026-10-13T16:17:38+00:00" }, { "name": "symfony/var-exporter", - "version": "v8.1.1", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "75b74315b4e4be40e5534cf9c5cc30dd0907ed71" + "reference": "3717217839a76f6fa284931a224c4cada514da2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/75b74315b4e4be40e5534cf9c5cc30dd0907ed71", - "reference": "75b74315b4e4be40e5534cf9c5cc30dd0907ed71", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/3717217839a76f6fa284931a224c4cada514da2a", + "reference": "3717217839a76f6fa284931a224c4cada514da2a", "shasum": "" }, "require": { "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-deepclone": "^1.40" + "symfony/polyfill-deepclone": "^1.43.1" }, "require-dev": { "symfony/property-access": "^7.4|^8.0", @@ -5413,7 +5509,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v8.1.1" + "source": "https://github.com/symfony/var-exporter/tree/v8.1.9" }, "funding": [ { @@ -5433,20 +5529,20 @@ "type": "tidelift" } ], - "time": "2026-06-27T09:05:56+00:00" + "time": "2026-10-07T07:28:40+00:00" }, { "name": "symfony/yaml", - "version": "v8.1.1", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "8e4cdd4311683516be06944f4b85244063cdb886" + "reference": "6107ee26a25215c3df3af0a3315e56bb4fd0b7db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/8e4cdd4311683516be06944f4b85244063cdb886", - "reference": "8e4cdd4311683516be06944f4b85244063cdb886", + "url": "https://api.github.com/repos/symfony/yaml/zipball/6107ee26a25215c3df3af0a3315e56bb4fd0b7db", + "reference": "6107ee26a25215c3df3af0a3315e56bb4fd0b7db", "shasum": "" }, "require": { @@ -5489,7 +5585,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v8.1.1" + "source": "https://github.com/symfony/yaml/tree/v8.1.9" }, "funding": [ { @@ -5509,27 +5605,27 @@ "type": "tidelift" } ], - "time": "2026-06-09T11:06:24+00:00" + "time": "2026-10-12T12:37:13+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.4", + "version": "v5.7.0", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b" + "url": "https://github.com/phpdotenv/phpdotenv.git", + "reference": "301c07936b16d88628b126b01d082ba153cf4c40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b", - "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b", + "url": "https://api.github.com/repos/phpdotenv/phpdotenv/zipball/301c07936b16d88628b126b01d082ba153cf4c40", + "reference": "301c07936b16d88628b126b01d082ba153cf4c40", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.4", + "graham-campbell/result-type": "^1.2", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.5", + "phpoption/phpoption": "^1.10", "symfony/polyfill-ctype": "^1.26", "symfony/polyfill-mbstring": "^1.26", "symfony/polyfill-php80": "^1.26" @@ -5573,7 +5669,7 @@ "homepage": "https://github.com/vlucas" } ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "description": "Loads environment variables from `.env` to `$_ENV` and `$_SERVER` automagically, and optionally to `getenv()`.", "keywords": [ "dotenv", "env", @@ -5581,7 +5677,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.4" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.7.0" }, "funding": [ { @@ -5593,7 +5689,7 @@ "type": "tidelift" } ], - "time": "2026-07-06T19:11:50+00:00" + "time": "2026-08-24T18:07:49+00:00" }, { "name": "voku/portable-ascii", @@ -5884,16 +5980,16 @@ }, { "name": "composer/semver", - "version": "3.4.4", + "version": "3.5.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + "reference": "9dfce66f1e97360ea5e6d3e38ab14277e4cc591e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "url": "https://api.github.com/repos/composer/semver/zipball/9dfce66f1e97360ea5e6d3e38ab14277e4cc591e", + "reference": "9dfce66f1e97360ea5e6d3e38ab14277e4cc591e", "shasum": "" }, "require": { @@ -5935,7 +6031,7 @@ "homepage": "http://robbast.nl" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "Version comparison library that offers utilities, version constraint parsing and validation.", "keywords": [ "semantic", "semver", @@ -5945,7 +6041,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.4" + "source": "https://github.com/composer/semver/tree/3.5.2" }, "funding": [ { @@ -5957,7 +6053,7 @@ "type": "github" } ], - "time": "2025-08-20T19:15:30+00:00" + "time": "2026-10-22T15:37:26+00:00" }, { "name": "composer/xdebug-handler", @@ -6027,42 +6123,42 @@ }, { "name": "ergebnis/agent-detector", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/ergebnis/agent-detector.git", - "reference": "e211f17928c8b95a51e06040792d57f5462fb271" + "reference": "0cd815cec1207873c37624d33f0f2853523152f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/agent-detector/zipball/e211f17928c8b95a51e06040792d57f5462fb271", - "reference": "e211f17928c8b95a51e06040792d57f5462fb271", + "url": "https://api.github.com/repos/ergebnis/agent-detector/zipball/0cd815cec1207873c37624d33f0f2853523152f3", + "reference": "0cd815cec1207873c37624d33f0f2853523152f3", "shasum": "" }, "require": { "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0 || ~8.6.0" }, "require-dev": { - "ergebnis/composer-normalize": "^2.51.0", - "ergebnis/license": "^2.7.0", + "ergebnis/composer-normalize": "^2.54.0", + "ergebnis/license": "^2.8.0", "ergebnis/php-cs-fixer-config": "^6.60.2", - "ergebnis/phpstan-rules": "^2.13.1", - "ergebnis/phpunit-slow-test-detector": "^2.24.0", - "ergebnis/rector-rules": "^1.18.1", + "ergebnis/phpstan-rules": "^2.14.0", + "ergebnis/phpunit-slow-test-detector": "^2.26.0", + "ergebnis/rector-rules": "^1.18.5", "fakerphp/faker": "^1.24.1", "infection/infection": "^0.26.6", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.1.54", - "phpstan/phpstan-deprecation-rules": "^2.0.4", - "phpstan/phpstan-phpunit": "^2.0.16", - "phpstan/phpstan-strict-rules": "^2.0.10", + "phpstan/phpstan": "^2.2.14", + "phpstan/phpstan-deprecation-rules": "^2.0.5", + "phpstan/phpstan-phpunit": "^2.1.1", + "phpstan/phpstan-strict-rules": "^2.1.0", "phpunit/phpunit": "^9.6.34", - "rector/rector": "^2.4.2" + "rector/rector": "^2.7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.2-dev" + "dev-main": "1.3-dev" }, "composer-normalize": { "indent-size": 2, @@ -6092,7 +6188,7 @@ "security": "https://github.com/ergebnis/agent-detector/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/agent-detector" }, - "time": "2026-05-07T08:19:07+00:00" + "time": "2026-10-15T11:13:32+00:00" }, { "name": "evenement/evenement", @@ -6206,23 +6302,23 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.3.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678" + "reference": "d384a7d0d6e67aa497327260ca95023e92dc2032" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/d384a7d0d6e67aa497327260ca95023e92dc2032", + "reference": "d384a7d0d6e67aa497327260ca95023e92dc2032", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "fidry/makefile": "^0.2.0", + "fidry/makefile": "^0.2.0 || ^1.1.2", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", "phpstan/phpstan": "^2.0", @@ -6230,6 +6326,7 @@ "phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "symfony/polyfill-mbstring": "^1.33", "webmozarts/strict-phpunit": "^7.5" }, "type": "library", @@ -6255,7 +6352,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.4.1" }, "funding": [ { @@ -6263,20 +6360,20 @@ "type": "github" } ], - "time": "2025-08-14T07:29:31+00:00" + "time": "2026-09-29T22:11:39+00:00" }, { "name": "filp/whoops", - "version": "2.18.4", + "version": "2.18.7", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + "reference": "50670ba239926c50f2073e868f6672f775cd57ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "url": "https://api.github.com/repos/filp/whoops/zipball/50670ba239926c50f2073e868f6672f775cd57ec", + "reference": "50670ba239926c50f2073e868f6672f775cd57ec", "shasum": "" }, "require": { @@ -6285,8 +6382,8 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^4.0 || ^5.0" + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3 || ^10.5.58", + "symfony/var-dumper": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -6326,7 +6423,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.4" + "source": "https://github.com/filp/whoops/tree/2.18.7" }, "funding": [ { @@ -6334,20 +6431,20 @@ "type": "github" } ], - "time": "2025-08-08T12:00:00+00:00" + "time": "2026-10-18T13:17:38+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.95.15", + "version": "v3.95.27", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "3e47e5d50046f87e3244acde2fe655d1a3b72555" + "reference": "1d0c68ee5f37446d8ad5970b82384cd1bb0a3317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3e47e5d50046f87e3244acde2fe655d1a3b72555", - "reference": "3e47e5d50046f87e3244acde2fe655d1a3b72555", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1d0c68ee5f37446d8ad5970b82384cd1bb0a3317", + "reference": "1d0c68ee5f37446d8ad5970b82384cd1bb0a3317", "shasum": "" }, "require": { @@ -6381,16 +6478,15 @@ "require-dev": { "facile-it/paraunit": "^1.3.1 || ^2.11.0", "infection/infection": "^0.32.7", - "justinrainbow/json-schema": "^6.10.0", + "justinrainbow/json-schema": "^6.12.0", "keradus/cli-executor": "^2.3", - "mikey179/vfsstream": "^1.6.12", "php-coveralls/php-coveralls": "^2.9.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8", - "phpunit/phpunit": "^9.6.35 || ^10.5.64 || ^11.5.56 || ^12.5.31", - "symfony/polyfill-php85": "^1.38", - "symfony/var-dumper": "^5.4.48 || ^6.4.36 || ^7.4.8 || ^8.1.0", - "symfony/yaml": "^5.4.53 || ^6.4.41 || ^7.4.13 || ^8.1.0" + "phpunit/phpunit": "^9.6.36 || ^10.5.64 || ^11.5.56 || ^12.5.35 || ^13.3.3", + "symfony/polyfill-php85": "^1.41", + "symfony/var-dumper": "^5.4.48 || ^6.4.45 || ^7.4.18 || ^8.1.7", + "symfony/yaml": "^5.4.53 || ^6.4.45 || ^7.4.18 || ^8.1.6" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -6431,7 +6527,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.15" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.27" }, "funding": [ { @@ -6439,24 +6535,24 @@ "type": "github" } ], - "time": "2026-07-15T09:51:47+00:00" + "time": "2026-09-22T09:54:55+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.13.4", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", + "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.0" }, "conflict": { "doctrine/collections": "<1.6.8", @@ -6491,28 +6587,28 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + "source": "https://github.com/myclabs/DeepCopy/tree/1.14.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://github.com/mnapoli", + "type": "github" } ], - "time": "2025-08-01T08:46:24+00:00" + "time": "2026-08-11T10:17:44+00:00" }, { "name": "nikic/php-parser", - "version": "v5.8.0", + "version": "v5.9.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", - "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9e33da9553fe7786f0962b35f4e4ecf01be89def", + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def", "shasum": "" }, "require": { @@ -6554,9 +6650,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.9.0" }, - "time": "2026-07-04T14:30:18+00:00" + "time": "2026-09-13T18:51:52+00:00" }, { "name": "phar-io/manifest", @@ -6678,16 +6774,16 @@ }, { "name": "phpat/phpat", - "version": "0.12.4", + "version": "0.12.5", "source": { "type": "git", "url": "https://github.com/carlosas/phpat.git", - "reference": "5319264270c335f548451209bb0f32b55aa59924" + "reference": "408d16fdd893e1efc4a3c4a851f407204c69781a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/carlosas/phpat/zipball/5319264270c335f548451209bb0f32b55aa59924", - "reference": "5319264270c335f548451209bb0f32b55aa59924", + "url": "https://api.github.com/repos/carlosas/phpat/zipball/408d16fdd893e1efc4a3c4a851f407204c69781a", + "reference": "408d16fdd893e1efc4a3c4a851f407204c69781a", "shasum": "" }, "require": { @@ -6729,17 +6825,17 @@ "description": "PHP Architecture Tester", "support": { "issues": "https://github.com/carlosas/phpat/issues", - "source": "https://github.com/carlosas/phpat/tree/0.12.4" + "source": "https://github.com/carlosas/phpat/tree/0.12.5" }, - "time": "2026-03-17T16:47:43+00:00" + "time": "2026-09-15T18:11:37+00:00" }, { "name": "phpstan/phpstan", - "version": "2.2.5", + "version": "2.3.2", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/909c1e5fef7989ac0d0c1c5c42e32a5c4f6198a0", - "reference": "909c1e5fef7989ac0d0c1c5c42e32a5c4f6198a0", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/18bc23a0682f08591529377d271b5c4dfe9ed1dd", + "reference": "18bc23a0682f08591529377d271b5c4dfe9ed1dd", "shasum": "" }, "require": { @@ -6795,20 +6891,20 @@ "type": "github" } ], - "time": "2026-07-05T06:31:06+00:00" + "time": "2026-10-24T11:36:00+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", - "version": "2.0.4", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "6b5571001a7f04fa0422254c30a0017ec2f2cacc" + "reference": "67bedd65c24bc72840afc45aed48b1059dd44bec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/6b5571001a7f04fa0422254c30a0017ec2f2cacc", - "reference": "6b5571001a7f04fa0422254c30a0017ec2f2cacc", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/67bedd65c24bc72840afc45aed48b1059dd44bec", + "reference": "67bedd65c24bc72840afc45aed48b1059dd44bec", "shasum": "" }, "require": { @@ -6818,7 +6914,8 @@ "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.6" + "phpunit/phpunit": "^9.6", + "shipmonk/name-collision-detector": "^2.1" }, "type": "phpstan-extension", "extra": { @@ -6843,28 +6940,28 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.4" + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.5" }, - "time": "2026-02-09T13:21:14+00:00" + "time": "2026-07-22T06:50:43+00:00" }, { "name": "phpstan/phpstan-phpunit", - "version": "2.0.18", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "f5dc20ff8082d02339b60cab68ec3eb0d859fb30" + "reference": "8d16b8478e523a47f8c02e83bce8981b5b5a3b03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/f5dc20ff8082d02339b60cab68ec3eb0d859fb30", - "reference": "f5dc20ff8082d02339b60cab68ec3eb0d859fb30", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/8d16b8478e523a47f8c02e83bce8981b5b5a3b03", + "reference": "8d16b8478e523a47f8c02e83bce8981b5b5a3b03", "shasum": "" }, "require": { "phar-io/version": "^3.2", "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.2.3" + "phpstan/phpstan": "^2.3.0" }, "conflict": { "phpunit/phpunit": "<7.0" @@ -6901,27 +6998,27 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.18" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.1.1" }, - "time": "2026-07-04T12:16:09+00:00" + "time": "2026-10-06T18:12:32+00:00" }, { "name": "phpstan/phpstan-strict-rules", - "version": "2.0.12", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "2bc5ae19ae965663b62ac907ee6342c3903ec93b" + "reference": "24ec51589f896f048d0d36de373d993b5cf71786" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/2bc5ae19ae965663b62ac907ee6342c3903ec93b", - "reference": "2bc5ae19ae965663b62ac907ee6342c3903ec93b", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/24ec51589f896f048d0d36de373d993b5cf71786", + "reference": "24ec51589f896f048d0d36de373d993b5cf71786", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.1.52" + "phpstan/phpstan": "^2.3" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", @@ -6953,22 +7050,22 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.12" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.1.0" }, - "time": "2026-07-19T07:24:06+00:00" + "time": "2026-10-01T21:30:37+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "14.2.3", + "version": "14.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "82f6e49ff224e2cde923d74425e583a883910783" + "reference": "f1e54f06b6b4cea73cd6104ba3c0cfa0efa6d73f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/82f6e49ff224e2cde923d74425e583a883910783", - "reference": "82f6e49ff224e2cde923d74425e583a883910783", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1e54f06b6b4cea73cd6104ba3c0cfa0efa6d73f", + "reference": "f1e54f06b6b4cea73cd6104ba3c0cfa0efa6d73f", "shasum": "" }, "require": { @@ -6976,18 +7073,18 @@ "ext-libxml": "*", "ext-mbstring": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.8.0", + "nikic/php-parser": "^5.9.0", "php": ">=8.4", - "phpunit/php-text-template": "^6.0", + "phpunit/php-text-template": "^6.0.1", "sebastian/complexity": "^6.0", - "sebastian/environment": "^9.3.2", + "sebastian/environment": "^9.3.3", "sebastian/git-state": "^1.0", - "sebastian/lines-of-code": "^5.0.1", + "sebastian/lines-of-code": "^5.0.2", "sebastian/version": "^7.0", "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^13.2.2" + "phpunit/phpunit": "^13.3.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -6996,7 +7093,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "14.2.x-dev" + "dev-main": "14.4.x-dev" } }, "autoload": { @@ -7025,7 +7122,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.2.3" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.4.1" }, "funding": [ { @@ -7045,27 +7142,27 @@ "type": "tidelift" } ], - "time": "2026-07-06T15:04:02+00:00" + "time": "2026-10-03T14:05:38+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "7.0.0", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50" + "reference": "9bb4e6c58b62c1e043be995c66abec7c97307aae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6e5aa1fb0a95b1703d83e721299ee18bb4e2de50", - "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/9bb4e6c58b62c1e043be995c66abec7c97307aae", + "reference": "9bb4e6c58b62c1e043be995c66abec7c97307aae", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.3.1" }, "type": "library", "extra": { @@ -7098,7 +7195,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/7.0.2" }, "funding": [ { @@ -7118,7 +7215,7 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:33:26+00:00" + "time": "2026-08-25T14:47:43+00:00" }, { "name": "phpunit/php-invoker", @@ -7198,23 +7295,23 @@ }, { "name": "phpunit/php-text-template", - "version": "6.0.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4" + "reference": "97107691cb2b6c743b5e0c44be19e983cb337a02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/a47af19f93f76aa3368303d752aa5272ca3299f4", - "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/97107691cb2b6c743b5e0c44be19e983cb337a02", + "reference": "97107691cb2b6c743b5e0c44be19e983cb337a02", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.3.6" }, "type": "library", "extra": { @@ -7246,7 +7343,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/6.0.1" }, "funding": [ { @@ -7266,7 +7363,7 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:36:37+00:00" + "time": "2026-10-03T04:54:24+00:00" }, { "name": "phpunit/php-timer", @@ -7342,16 +7439,16 @@ }, { "name": "phpunit/phpunit", - "version": "13.2.4", + "version": "13.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8f5180f4627fc1978be2f61d8d9979dbe37e0c10" + "reference": "2180c47c4229e5da117ff248753370443c074f10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8f5180f4627fc1978be2f61d8d9979dbe37e0c10", - "reference": "8f5180f4627fc1978be2f61d8d9979dbe37e0c10", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2180c47c4229e5da117ff248753370443c074f10", + "reference": "2180c47c4229e5da117ff248753370443c074f10", "shasum": "" }, "require": { @@ -7361,27 +7458,27 @@ "ext-libxml": "*", "ext-mbstring": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", + "myclabs/deep-copy": "^1.14.0", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.4.1", - "phpunit/php-code-coverage": "^14.2.3", - "phpunit/php-file-iterator": "^7.0.0", + "phpunit/php-code-coverage": "^14.4.1", + "phpunit/php-file-iterator": "^7.0.2", "phpunit/php-invoker": "^7.0.0", - "phpunit/php-text-template": "^6.0.0", + "phpunit/php-text-template": "^6.0.1", "phpunit/php-timer": "^9.0.0", - "sebastian/cli-parser": "^5.0.0", - "sebastian/comparator": "^8.3.0", - "sebastian/diff": "^9.0", - "sebastian/environment": "^9.3.2", - "sebastian/exporter": "^8.1.0", + "sebastian/cli-parser": "^5.0.1", + "sebastian/comparator": "^8.4", + "sebastian/diff": "^9.0.1", + "sebastian/environment": "^9.3.3", + "sebastian/exporter": "^8.2.1", "sebastian/file-filter": "^1.0", "sebastian/git-state": "^1.0", "sebastian/global-state": "^9.0.1", - "sebastian/object-enumerator": "^8.0.0", - "sebastian/recursion-context": "^8.0.0", - "sebastian/type": "^7.0.1", - "sebastian/version": "^7.0.0", + "sebastian/object-enumerator": "^8.1.0", + "sebastian/recursion-context": "^8.0.1", + "sebastian/type": "^7.0.2", + "sebastian/version": "^7.0.1", "staabm/side-effects-detector": "^1.0.5" }, "bin": [ @@ -7390,7 +7487,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "13.2-dev" + "dev-main": "13.4-dev" } }, "autoload": { @@ -7422,7 +7519,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/13.2.4" + "source": "https://github.com/sebastianbergmann/phpunit/tree/13.4.3" }, "funding": [ { @@ -7430,7 +7527,7 @@ "type": "other" } ], - "time": "2026-07-08T08:36:51+00:00" + "time": "2026-10-16T05:56:47+00:00" }, { "name": "react/cache", @@ -7960,21 +8057,21 @@ }, { "name": "rector/rector", - "version": "2.5.7", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "ba22f8c087848278fed6b4910d4cf1108096d8d3" + "reference": "4d6a39b7fff302cac0ce90cd959a53c2f6a32776" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/ba22f8c087848278fed6b4910d4cf1108096d8d3", - "reference": "ba22f8c087848278fed6b4910d4cf1108096d8d3", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/4d6a39b7fff302cac0ce90cd959a53c2f6a32776", + "reference": "4d6a39b7fff302cac0ce90cd959a53c2f6a32776", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.2.2" + "phpstan/phpstan": "^2.3.0" }, "conflict": { "rector/rector-doctrine": "*", @@ -7982,9 +8079,6 @@ "rector/rector-phpunit": "*", "rector/rector-symfony": "*" }, - "suggest": { - "ext-dom": "To manipulate phpunit.xml via the custom-rule command" - }, "bin": [ "bin/rector" ], @@ -8008,7 +8102,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.5.7" + "source": "https://github.com/rectorphp/rector/tree/2.7.0" }, "funding": [ { @@ -8016,7 +8110,7 @@ "type": "github" } ], - "time": "2026-07-13T15:24:18+00:00" + "time": "2026-10-06T08:46:45+00:00" }, { "name": "roave/security-advisories", @@ -8024,12 +8118,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "4fac0729c45b6dba8d6171a94eccb1d5d9514bf9" + "reference": "e8f028bf983890e7ac18437f9b6f481e82233c4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/4fac0729c45b6dba8d6171a94eccb1d5d9514bf9", - "reference": "4fac0729c45b6dba8d6171a94eccb1d5d9514bf9", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e8f028bf983890e7ac18437f9b6f481e82233c4d", + "reference": "e8f028bf983890e7ac18437f9b6f481e82233c4d", "shasum": "" }, "conflict": { @@ -8059,22 +8153,25 @@ "altcha-org/altcha": "<1.3.1", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", + "ameos/ameos_filemanager": "<3.1.3", "ameos/ameos_tarteaucitron": "<1.2.23", "amphp/artax": "<1.0.6|>=2,<2.0.6", "amphp/http": "<=1.7.2|>=2,<=2.1", "amphp/http-client": ">=4,<4.4", - "amphp/http-server": ">=2.0.0.0-RC1-dev,<2.1.10|>=3.0.0.0-beta1,<3.4.4", + "amphp/http-server": ">=2.0.0.0-RC1,<2.1.10|>=3.0.0.0-beta1,<3.4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", "aoe/restler": "<1.7.1", - "apache-solr-for-typo3/solr": "<2.8.3", + "apache-solr-for-typo3/solr": "<11.2.8|>=11.5,<11.6.6|>=12,<12.1.4|>=13,<13.1.4", + "apache/thrift": "<0.24", "apereo/phpcas": "<1.6", - "api-platform/core": "<4.1.29|>=4.2,<4.2.25|>=4.3,<4.3.8", + "api-platform/core": "<4.1.30|>=4.2,<4.2.26|>=4.3,<4.3.12", "api-platform/graphql": "<3.4.17|>=4,<4.0.22|>=4.1,<4.1.5", "api-platform/hal": ">=4,<4.1.29|>=4.2,<4.2.25|>=4.3,<4.3.8", "api-platform/json-api": ">=4,<4.1.29|>=4.2,<4.2.25|>=4.3,<4.3.8", "appwrite/server-ce": "<=1.2.1", + "aptoma/twig-markdown": "<=3.4.1", "arc/web": "<3", "area17/twill": "<1.2.5|>=2,<2.5.3", "artesaos/seotools": "<0.17.2", @@ -8096,7 +8193,7 @@ "azuracast/azuracast": "<=0.23.5", "b13/seo_basics": "<0.8.2", "backdrop/backdrop": "<=1.32", - "backpack/crud": "<4.0.63|>=4.1,<4.1.69|>=5,<5.0.13", + "backpack/crud": "<6.8.15|>=7,<7.0.47", "backpack/filemanager": "<2.0.2|>=3,<3.0.9", "bacula-web/bacula-web": "<9.7.1", "badaso/core": "<=2.9.11", @@ -8118,6 +8215,7 @@ "binarytorch/larecipe": "<2.8.1", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", "blueimp/jquery-file-upload": "==6.4.4", + "blueways/bw-captcha": ">=4,<5.4.2", "bmarshall511/wordpress_zero_spam": "<5.2.13", "bolt/bolt": "<3.7.2", "bolt/core": "<=4.2", @@ -8128,26 +8226,29 @@ "brotkrueml/codehighlight": "<2.7", "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", "brotkrueml/typo3-matomo-integration": "<1.3.2", - "buddypress/buddypress": "<7.2.1", + "buddypress/buddypress": "<14.5", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "bvbmedia/multishop": "<2.0.39", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", "cadmium-org/cadmium-cms": "<=0.4.9", - "cakephp/authentication": "<3.3.6|>=4,<4.1.1", - "cakephp/cakephp": "<4.5.11|>=4.6,<4.6.4|>=5,<5.1.7|>=5.2,<5.2.13|>=5.3,<5.3.6", - "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cakephp/authentication": "<2.11.1|>=3,<3.3.6|>=4,<4.1.1", + "cakephp/cakephp": "<4.5.12|>=4.6,<4.6.5|>=5,<5.1.10|>=5.2,<5.2.15|>=5.3,<5.3.7", + "cakephp/database": ">=3,<4.5.12|>=4.6,<4.6.5|>=5,<5.1.10|>=5.2,<5.2.15|>=5.3,<5.3.7", + "cakephp/debug_kit": "<4.10.3|>=5,<5.2.4", + "cakephp/queue": ">=0.1.10,<2.3.1", "cardgate/magento2": "<2.0.33", "cardgate/woocommerce": "<=3.1.15", "cart2quote/module-quotation": ">=4.1.6,<4.4.6|>=5,<5.4.4", - "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<2.1.7", "catfan/medoo": "<1.7.5", + "causal/fal-protect": ">=1.7.1,<1.8.2", "causal/oidc": "<4", "cecil/cecil": "<7.47.1", "centreon/centreon": "<22.10.15", "cesargb/laravel-magiclink": ">=2,<2.25.1", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "chamilo/chamilo-lms": "<=2", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", "ci4-cms-erp/ci4ms": "<=0.31.8", @@ -8156,26 +8257,30 @@ "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", "co-stack/fal_sftp": "<0.2.6", "cockpit-hq/cockpit": "<=2.14", - "code16/sharp": "<9.22.3", + "code16/sharp": "<9.22.5", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.10", - "codeigniter4/framework": "<4.7.2", + "codeigniter4/framework": "<4.7.4", "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", "codingms/additional-tca": ">=1.7,<1.15.17|>=1.16,<1.16.9", - "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", + "codingms/fluid-form": "<5.0.10|>=6,<6.0.6", + "codingms/modules": "<7.10.4|>=8,<8.1.4", + "codingms/shop": "<4.9.4|>=5,<5.21.1|>=6,<6.3", "commerceteam/commerce": ">=0.9.6,<0.9.9", "components/jquery": ">=1.0.3,<3.5", - "composer/composer": "<2.2.28|>=2.3,<2.9.8", + "composer/composer": "<2.2.30|>=2.3,<2.10.3", "concrete5/concrete5": "<9.5.2", "concrete5/core": "<8.5.8|>=9,<9.1", + "contao-components/colorbox": ">=1,<1.6.4.3-dev", "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", - "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<5.3.48|>=5.4,<5.7.9", + "contao/comments-bundle": ">=2,<5.3.50|>=5.4,<5.7.12", + "contao/contao": ">=3,<3.5.37|>=4,<5.3.50|>=5.4,<5.7.12", "contao/core": "<3.5.39", - "contao/core-bundle": "<5.3.48|>=5.4,<5.7.9", + "contao/core-bundle": "<5.3.50|>=5.4,<5.7.12", "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", + "contao/newsletter-bundle": ">=5,<5.3.50|>=5.4,<5.7.12", "coreshop/core-shop": "<4.1.9|==5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", @@ -8184,10 +8289,10 @@ "cpsit/typo3-mailqueue": "<0.4.5|>=0.5,<0.5.2", "craftcms/aws-s3": ">=2.0.2,<=2.2.4", "craftcms/azure-blob": ">=2.0.0.0-beta1,<=2.1", - "craftcms/cms": "<4.18|>=5,<5.10", + "craftcms/cms": "<4.18.3|>=5,<5.10.8", "craftcms/commerce": ">=4,<=4.11.1|>=5,<=5.6.4", - "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", - "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", + "craftcms/composer": ">=4.0.0.0-RC1,<=4.10|>=5.0.0.0-RC1,<=5.5.1", + "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1,<=5.8.21", "craftcms/google-cloud": ">=2.0.0.0-beta1,<=2.2", "craftcms/webhooks": ">=3,<3.2", "croogo/croogo": "<=4.0.7", @@ -8205,7 +8310,7 @@ "dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta", "dedoc/scramble": ">=0.13.2,<0.13.22", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", - "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", + "derhansen/sf_event_mgt": "<5.9.3|>=6,<6.7.2|>=7,<7.9.3|>=8,<8.6.2|>=9,<9.0.3", "desperado/xml-bundle": "<=0.1.7", "dev-lancer/minecraft-motd-parser": "<=1.0.5", "devcode-it/openstamanager": "<=2.10.1", @@ -8226,9 +8331,11 @@ "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", "dolibarr/dolibarr": "<=23.0.2", - "dompdf/dompdf": "<2.0.4", + "dompdf/dompdf": "<3.1.6", "doublethreedigital/guest-entries": "<3.1.2", "dreamfactory/df-core": "<1.0.4", + "drupal-pattern-lab/add-attributes-twig-extension": "<=1.0.1", + "drupal-pattern-lab/bem-twig-extension": "<=1.0.1", "drupal-pattern-lab/unified-twig-extensions": "<=0.1", "drupal/access_code": "<2.0.5", "drupal/acquia_dam": "<1.1.5", @@ -8267,7 +8374,7 @@ "drupal/umami_analytics": "<1.0.1", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", - "easycorp/easyadmin-bundle": ">=4,<4.29.10|>=5,<5.0.13", + "easycorp/easyadmin-bundle": ">=4,<4.29.16|>=5,<5.5.1", "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.3.1", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", @@ -8279,7 +8386,7 @@ "encore/laravel-admin": "<=1.8.19", "endroid/qr-code-bundle": "<3.4.2", "enhavo/enhavo-app": "<=0.13.1", - "enshrined/svg-sanitize": "<0.22", + "enshrined/svg-sanitize": "<=0.22", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", "evolutioncms/evolution": "<=3.2.3", @@ -8293,7 +8400,7 @@ "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.39|>=3.3,<3.3.39", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1|>=5.3.0.0-beta1,<5.3.5", - "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1,<1.0.13|>=2.0.0.0-beta1,<2.3.12", "ezsystems/ezplatform-http-cache": "<2.3.16", "ezsystems/ezplatform-kernel": "<=1.2.5|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", @@ -8312,7 +8419,7 @@ "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", "filament/actions": ">=3.2,<3.2.123|>=4,<=4.11.3|>=5,<=5.6.3", - "filament/filament": ">=3,<=3.3.51|>=4,<4.11.5|>=5,<5.6.5", + "filament/filament": ">=3,<=3.3.51|>=4,<=4.13.2|>=5,<=5.8.2", "filament/forms": ">=3,<=3.3.52", "filament/infolists": ">=3,<3.2.115|>=4,<=4.11.4|>=5,<=5.6.4", "filament/tables": ">=3,<=3.3.50|>=4,<=4.11.4|>=5,<=5.6.4", @@ -8334,6 +8441,7 @@ "floriangaerber/magnesium": "<0.3.1", "fluidtypo3/vhs": "<5.1.1", "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", + "fof/oauth": "<1.7.4|>=2.0.0.0-beta1,<2.0.0.0-beta4", "fof/pretty-mail": "<=1.1.2", "fof/upload": "<1.2.3", "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", @@ -8341,7 +8449,7 @@ "forkcms/forkcms": "<5.11.1", "fossar/tcpdf-parser": "<6.2.22", "francoisjacquet/rosariosis": "<=11.5.1", - "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", + "frappant/frp-form-answers": "<5.0.5|>=6,<6.1.3|>=7,<7.1.1", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1,<1.3.5", @@ -8352,7 +8460,7 @@ "friendsoftypo3/tt-address": "<8.1.2|>=9,<9.1.1|>=10,<10.0.1", "froala/wysiwyg-editor": "<=4.3", "frosh/adminer-platform": "<2.2.1", - "froxlor/froxlor": "<2.3.7", + "froxlor/froxlor": "<2.3.8", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=7.1.0.0-RC6", @@ -8361,10 +8469,10 @@ "georgringer/news": "<10.0.4|>=11,<11.4.4|>=12,<12.3.2|>=13,<13.0.2|>=14,<14.0.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<=2.3.3", - "getgrav/grav": "<=2.0.0.0-RC8", + "getgrav/grav": "<=2.0.19", "getgrav/grav-plugin-api": "<1.0.0.0-beta15", "getgrav/grav-plugin-form": "<9.1", - "getkirby/cms": "<=4.9.3|>=5,<=5.4.3", + "getkirby/cms": "<4.9.5|>=5,<5.5.2", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", @@ -8381,10 +8489,10 @@ "gregwar/rst": "<1.0.3", "grumpydictator/firefly-iii": "<=6.6.2", "gugoan/economizzer": "<=0.9.0.0-beta1", - "guzzlehttp/guzzle": "<7.12.1", + "guzzlehttp/guzzle": "<7.15.2|>=8,<8.0.1", "guzzlehttp/guzzle-services": "<1.5.4", "guzzlehttp/oauth-subscriber": "<0.8.1", - "guzzlehttp/psr7": "<2.12.1", + "guzzlehttp/psr7": "<2.12.3", "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", "handcraftedinthealps/goodby-csv": "<1.4.3", "harvesthq/chosen": "<1.8.7", @@ -8418,10 +8526,10 @@ "imdbphp/imdbphp": "<=5.1.1", "impresscms/impresscms": "<=1.4.5", "impresspages/impresspages": "<1.0.13", - "in2code/femanager": "<6.4.2|>=7,<7.5.3|>=8,<8.3.1", + "in2code/femanager": "<6.4.5|>=7,<7.5.5|>=8,<8.4.2|>=13,<13.3.5", "in2code/ipandlanguageredirect": "<5.1.2", "in2code/lux": "<17.6.1|>=18,<24.0.2", - "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.5.3|==13", + "in2code/powermail": "<10.9.3|>=11,<12.6.1|>=13,<13.2.1", "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<4.2.2", "inter-mediator/inter-mediator": "==5.5", @@ -8432,11 +8540,13 @@ "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", "j0k3r/graby": "<=2.5", + "j0k3r/httplug-ssrf-plugin": "<=3.0.1", "jackalope/jackalope-doctrine-dbal": "<1.7.4", "jambagecom/div2007": "<0.10.2", "james-heinrich/getid3": "<1.9.21", "james-heinrich/phpthumb": "<=1.7.23", "jasig/phpcas": "<1.3.3", + "jayanta/laravel-threat-detection": "<1.9", "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", "jleehr/canto-saas-api": "<=2", @@ -8458,8 +8568,12 @@ "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", "juzaweb/cms": "<=3.4.2", - "jweiland/events2": "<8.3.8|>=9,<9.0.6", + "jweiland/clubdirectory": "<6.0.2|>=7,<7.0.2|>=8,<8.1.3", + "jweiland/events2": "<8.6.3|>=9,<9.4.2|>=10,<10.2.12", "jweiland/kk-downloader": "<1.2.2", + "jweiland/pforum": "<4.0.4|>=5,<5.0.1|>=6,<6.2.4", + "jweiland/telephonedirectory": "<4.1.1|>=5,<5.0.1|>=6,<6.2", + "jweiland/yellowpages2": "<6.1.6|>=7,<7.0.3|>=8,<8.1.2", "kantorge/yaffa": "<=2", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplejwt": "<=1.1", @@ -8467,14 +8581,16 @@ "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3.4.1", "kimai/kimai": "<2.59", - "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", + "kitodo/presentation": "<6.0.1|>=7,<7.0.2", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.7", "kohana/core": "<3.3.3", - "koillection/koillection": "<1.6.12", + "koillection/koillection": "<1.8.4", "krayin/laravel-crm": "<=2.2", "kreait/firebase-php": ">=3.2,<3.8.1", "kumbiaphp/kumbiapp": "<=1.1.1", + "kunstmaan/bundles-cms": "<7.3.2", + "kunstmaan/media-bundle": "<7.3.2", "la-haute-societe/tcpdf": "<6.2.22", "laktak/hjson": "<2.3", "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", @@ -8483,7 +8599,7 @@ "lara-zeus/artemis": ">=1,<=1.0.6", "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1", "laravel/fortify": "<1.11.1", - "laravel/framework": "<12.61.1|>=13,<13.12", + "laravel/framework": "<12.69|>=13,<13.30", "laravel/laravel": ">=5.4,<5.4.22", "laravel/passport": ">=13,<13.7.1", "laravel/pulse": "<1.3.1", @@ -8493,25 +8609,28 @@ "lavalite/cms": "<=10.1", "lavitto/typo3-form-to-database": "<2.2.5|>=3,<3.2.2|>=4,<4.2.3|>=5,<5.0.2", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<=2.8.1", - "league/flysystem": "<1.1.4|>=2,<2.1.1", + "league/commonmark": "<=2.10.1", + "league/flysystem": "<=3.35.2", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", - "leantime/leantime": "<3.3", + "leantime/leantime": "<3.10", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<26.3", + "librenms/librenms": "<26.7", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", - "limesurvey/limesurvey": "<6.15.4", + "limesurvey/limesurvey": "<=7.0.0.0-beta1", + "litesaml/lightsaml": ">=6,<6.0.1", "livehelperchat/livehelperchat": "<=3.91", "livewire-filemanager/filemanager": "<=1.0.4", - "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.6.4", + "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<=3.8.2|>=4.0.0.0-beta1,<4.4.8", "livewire/volt": "<1.7", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "lochmueller/html5videoplayer-powermail": "<=0.2.1", "lomkit/laravel-rest-api": "<2.13", "luracast/restler": "<3.1", "luyadev/yii-helpers": "<1.2.1", + "maatwebsite/excel": ">=3.1.8,<3.1.70", "macropay-solutions/laravel-crud-wizard-free": "<3.4.17", "maestroerror/php-heic-to-jpg": "<1.0.5", "magento/community-edition": "<2.4.6.0-patch13|>=2.4.7.0-beta1,<2.4.7.0-patch8|>=2.4.8.0-beta1,<2.4.8.0-patch3|>=2.4.9.0-alpha1,<2.4.9.0-alpha3|==2.4.9", @@ -8529,6 +8648,7 @@ "marcwillmann/turn": "<0.3.3", "markhuot/craftql": "<=1.3.7", "marshmallow/nova-tiptap": "<5.7", + "mask/mask": "<8.3.12|>=9,<9.0.11", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", "mautic/core": "<5.2.11|>=6,<6.0.9|>=7,<7.1.2", @@ -8536,6 +8656,7 @@ "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mckenziearts/livewire-markdown-editor": "<1.3", + "mcp/sdk": ">=0.5,<0.7.1", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", "mediawiki/cargo": "<3.8.3", @@ -8543,7 +8664,7 @@ "mediawiki/data-transfer": ">=1.39,<1.39.11|>=1.41,<1.41.3|>=1.42,<1.42.2", "mediawiki/maps": "<12.1.3", "mediawiki/matomo": "<2.4.3", - "mediawiki/semantic-media-wiki": "<4.0.2", + "mediawiki/semantic-media-wiki": "<=7.2.1", "mehrwert/phpmyadmin": "<3.2", "melisplatform/melis-asset-manager": "<5.0.1", "melisplatform/melis-cms": "<5.3.4", @@ -8555,9 +8676,9 @@ "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", "microsoft/microsoft-graph-beta": "<2.0.1", "microsoft/microsoft-graph-core": "<2.0.2", - "microweber/microweber": "<2.0.20", + "microweber/microweber": "<=2.0.20", "mikehaertl/php-shellcommand": "<1.6.1", - "mineadmin/mineadmin": "<=3.0.9", + "mineadmin/mineadmin": "<3.2.0.0-alpha2", "miniorange/miniorange-saml": "<1.4.3", "miraheze/ts-portal": "<=33", "mittwald/typo3_forum": "<1.2.1", @@ -8566,7 +8687,7 @@ "mobiledetect/mobiledetectlib": "<2.8.32", "modx/revolution": "<=3.1", "mojo42/jirafeau": "<4.4", - "mongodb/mongodb": ">=1,<1.9.2", + "mongodb/mongodb": "<1.21.5|>=2,<2.4.2", "mongodb/mongodb-extension": "<1.21.2", "monolog/monolog": ">=1.8,<1.12", "moodle/moodle": "<4.5.9|>=5.0.0.0-beta,<5.0.5|>=5.1.0.0-beta,<5.1.2", @@ -8602,6 +8723,7 @@ "neuron-core/neuron-ai": "<=2.8.11", "nilsteampassnet/teampass": "<3.1.3.1-dev", "nitsan/ns-backup": "<13.0.1", + "nitsan/ns-t3ai": "<14.0.2", "nonfiction/nterchange": "<4.1.1", "notrinos/notrinos-erp": "<=1", "noumo/easyii": "<=0.9", @@ -8614,9 +8736,9 @@ "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", - "october/october": "<3.7.14|>=4,<4.1.10", + "october/october": "<3.7.14|>=4,<4.1.10|>=4.3,<4.3.4", "october/rain": "<=3.7.13|>=4,<=4.1.9", - "october/system": "<3.7.16|>=4,<4.1.16", + "october/system": "<3.7.17|>=4,<4.2.23", "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", @@ -8635,17 +8757,20 @@ "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", - "oxid-esales/oxideshop-ce": "<=7.0.5", + "oxid-esales/oxideshop-ce": "<4.5|>=6,<6.14.4", + "oxid-esales/oxideshop-metapackage-ce": ">=6,<6.5.5", "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", + "oxid-esales/smarty-component": "<1.0.1", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", "pagarme/pagarme-php": "<3", "pagekit/pagekit": "<=1.0.18", "paragonie/ecc": "<2.0.1", "paragonie/random_compat": "<2", - "paragonie/sodium_compat": "<1.24|>=2,<2.5", + "paragonie/sodium_compat": "<1.24.1|>=2,<2.5.1", "passbolt/passbolt_api": "<4.6.2", - "paymenter/paymenter": "<=1.5.4", + "pattern-lab/drupal-twig-components": "<=2.2", + "paymenter/paymenter": "<=1.5.6", "paypal/adaptivepayments-sdk-php": "<=3.9.2", "paypal/invoice-sdk-php": "<=3.9", "paypal/merchant-sdk-php": "<3.12", @@ -8658,51 +8783,57 @@ "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "ph7software/ph7builder": "<=17.9.1", + "phalcon/cphalcon": "<=5.15", "phanan/koel": "<=9.7", - "pheditor/pheditor": "<2.0.6", + "pheditor/pheditor": "<2.0.8", "phenx/php-svg-lib": "<0.5.2", + "php": "<8.2.35|>=8.3,<8.3.36|>=8.4,<8.4.27|>=8.5,<8.5.12", "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", "php-mod/curl": "<2.3.2", "php-standard-library/h2": ">=6.1,<6.1.2|>=6.2,<6.2.1", "php-standard-library/php-standard-library": ">=6.1,<6.1.2|>=6.2,<6.2.1", "phpbb/phpbb": "<3.3.16|==4.0.0.0-alpha1", + "phpcsstandards/phpcsutils": ">=1.0.0.0-alpha1,<1.2.3", "phpems/phpems": ">=6,<=6.1.3", "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.2", - "phpmyfaq/phpmyfaq": "<4.1.4", + "phpmyfaq/phpmyfaq": "<4.2.0.0-alpha", "phpoffice/common": "<0.2.9", "phpoffice/math": "<=0.2", "phpoffice/phpexcel": "<=1.8.2", - "phpoffice/phpspreadsheet": "<=1.30.4|>=2,<=2.1.15|>=2.2,<=2.4.4|>=3,<=3.10.4|>=4,<=5.6", + "phpoffice/phpspreadsheet": "<=1.30.5|>=2,<=2.1.17|>=2.2,<=2.4.6|>=3,<=3.10.6|>=4,<=5.8", "phppgadmin/phppgadmin": "<=7.13", - "phpseclib/phpseclib": "<=2.0.54|>=3,<=3.0.53", + "phpseclib/phpseclib": "<3.0.57|>=4,<4.0.1", "phpservermon/phpservermon": "<3.6", - "phpsysinfo/phpsysinfo": "<3.4.3", + "phpsysinfo/phpsysinfo": "<=3.4.5", "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "phraseanet/phraseanet": "==4.0.3", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.7.18|>=2.0.0.0-RC1-dev,<=2.3.5", + "pimcore/admin-ui-classic-bundle": "<1.7.18|>=2.0.0.0-RC1,<=2.3.5", "pimcore/customer-management-framework-bundle": "<4.2.1", "pimcore/data-hub": "<1.2.4", "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<=12.3.8|>=2026.1,<2026.1.3", - "pimcore/web2print-tools-bundle": "<=5.2.1|>=6.0.0.0-RC1-dev,<=6.1", + "pimcore/pimcore": "<=12.3.9|>=2026.1,<=2026.1.5", + "pimcore/studio-backend-bundle": "<2025.4.6|>=2026.1,<2026.1.6", + "pimcore/web2print-tools-bundle": "<=5.2.1|>=6.0.0.0-RC1,<=6.1", "piwik/piwik": "<1.11", "pixelfed/pixelfed": "<0.12.5", + "plank/laravel-mediable": "<7", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", "pocketmine/pocketmine-mp": "<5.42.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pontedilana/php-weasyprint": "<=2.5.1", - "poweradmin/poweradmin": "<4.2.4|>=4.3,<4.3.3", + "poweradmin/poweradmin": "<4.2.5|>=4.3,<4.3.4", + "predis/predis": ">=3.0.0.0-RC1,<3.3", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", "prestashop/blockreassurance": "<=5.1.3", @@ -8716,13 +8847,13 @@ "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<4.0.4", "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.4|>=1.5,<1.7.4|>=1.7.7,<2.0.3", + "privatebin/privatebin": "<=2.0.4", "processwire/processwire": "<=3.0.255", "propel/propel": ">=2.0.0.0-alpha1,<2.0.0.0-alpha8", "propel/propel1": ">=1,<1.7.2", "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", - "pterodactyl/panel": "<1.12.3", - "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", + "pterodactyl/panel": "<=1.12.4", + "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pubnub/pubnub": "<6.1", "punktde/pt_extbase": "<1.5.1", @@ -8739,9 +8870,9 @@ "ralffreit/mfa-email": "<1.0.7|==2", "rankmath/seo-by-rank-math": "<=1.0.95", "rap2hpoutre/laravel-log-viewer": "<0.13", - "react/http": ">=0.7,<1.9", + "react/http": ">=0.6,<1.11.1", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<5.21", + "redaxo/source": "<=5.21.1", "remdex/livehelperchat": "<4.29", "renolit/reint-downloadmanager": "<4.0.2|>=5,<5.0.1", "reportico-web/reportico": "<=8.1", @@ -8751,7 +8882,7 @@ "roadiz/openid": "<2.3.43|>=2.5,<2.5.45|>=2.6,<2.6.31|>=2.7,<2.7.18", "robrichards/xmlseclibs": "<3.1.5", "roots/soil": "<4.1", - "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11|>=1.7.0.0-beta,<1.7.0.0-RC5-dev", + "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11|>=1.7.0.0-beta,<1.7.0.0-RC5", "rudloff/alltube": "<3.0.3", "rudloff/rtmpdump-bin": "<=2.3.1", "s-cart/core": "<=9.0.5", @@ -8766,9 +8897,11 @@ "serluck/phpwhois": "<=4.2.6", "setasign/fpdi": "<2.6.7", "sfroemken/url_redirect": "<=1.2.1", + "sgalinski/sg-cookie-optin": "<7.4.6|>=8,<8.1.12", "sheng/yiicms": "<1.2.1", + "shlinkio/shlink": "<=5.0.1", "shopper/cart": "<2.8", - "shopper/framework": "<2.8", + "shopper/framework": "<2.9.2", "shopware/core": "<6.6.10.18-dev|>=6.7,<6.7.10.1-dev", "shopware/platform": "<6.6.10.18-dev|>=6.7,<6.7.10.1-dev", "shopware/production": "<=6.3.5.2", @@ -8798,8 +8931,8 @@ "silverstripe/versioned-admin": ">=1,<1.11.1", "simogeo/filemanager": "<=2.5", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<=4.20.2|>=5,<5.0.6|>=6,<6.2.1", - "simplesamlphp/saml2-legacy": "<=4.20.2", + "simplesamlphp/saml2": "<4.19.3|>=4.20,<=4.20.2|>=5,<5.0.6|>=6,<6.2.1", + "simplesamlphp/saml2-legacy": "<4.19.3|>=4.20,<=4.20.2", "simplesamlphp/simplesamlphp": "<=2.4.6|>=2.5,<=2.5.1", "simplesamlphp/simplesamlphp-module-casserver": "<=7.0.2", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", @@ -8815,8 +8948,8 @@ "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6|>=4.4,<=4.15.1", "slub/slub-events": "<3.0.3", - "smarty/smarty": "<4.5.3|>=5,<5.1.1", - "snipe/snipe-it": "<=8.6.1", + "smarty/smarty": "<4.5.7|>=5,<5.8.4", + "snipe/snipe-it": "<8.7", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "solidinvoice/solidinvoice": "<=2.3.15", @@ -8832,20 +8965,20 @@ "spomky-labs/otphp": "<11.4.3", "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", - "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "squizlabs/php_codesniffer": "<3.13.6|>=4,<4.0.2", "ssddanbrown/bookstack": "<24.05.1", "starcitizentools/citizen-skin": ">=1.9.4,<3.9", "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.74|>=6,<6.20.3", + "statamic/cms": "<5.74.3|>=6,<=6.30", "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<=2.1.67", + "studio-42/elfinder": "<2.1.70", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<=2.6.22|>=3,<=3.0.5", + "sulu/sulu": "<2.6.25|>=3,<3.0.8", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", "svewap/a21glossary": "<=0.4.10", @@ -8855,6 +8988,7 @@ "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": "<1.10.1", + "sylius/mollie-plugin": "<2.2.8|>=3,<3.2.4|>=3.3,<3.3.1", "sylius/paypal-plugin": "<1.6.2|>=1.7,<1.7.2|>=2,<2.0.2", "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", "sylius/sylius": "<1.9.12|>=1.10,<1.10.16|>=1.11,<1.11.17|>=1.12,<=1.12.22|>=1.13,<=1.13.14|>=1.14,<=1.14.17|>=2,<2.0.18|>=2.1,<2.1.15|>=2.2,<2.2.6", @@ -8868,11 +9002,12 @@ "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/dom-crawler": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", + "symfony/expression-language": ">=2.4,<5.4.54|>=6,<6.4.48|>=7,<7.4.21|>=8,<8.1.9", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", "symfony/html-sanitizer": ">=6.1,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", "symfony/http-client": ">=4.3,<5.4.53|>=6,<6.4.15|>=7,<7.1.8", - "symfony/http-foundation": "<5.4.50|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", + "symfony/http-foundation": "<5.4.54|>=6,<6.4.46|>=7,<7.4.19|>=8,<8.1.7", "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6|>=7.4,<7.4.12|>=8,<8.0.12", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/json-path": ">=7.3,<7.4.12|>=8,<8.0.12", @@ -8899,7 +9034,7 @@ "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", "symfony/security-http": "<5.4.53|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<5.4.53|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", + "symfony/symfony": "<5.4.54|>=6,<6.4.48|>=7,<7.4.21|>=8,<8.1.9", "symfony/translation": ">=2,<2.0.17", "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8|>=6.4.24,<6.4.40", "symfony/twilio-notifier": ">=6.4,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", @@ -8912,9 +9047,11 @@ "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4|>=7.2.9,<7.4.12|>=8,<8.0.12", "symfony/webhook": ">=6.3,<6.3.8", - "symfony/yaml": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/yaml": "<5.4.54|>=6,<6.4.45|>=7,<7.4.18|>=8,<8.1.6", "symphonycms/symphony-2": "<2.6.4", + "syssy/syssy-typo3-extension": "<3.0.6", "t3/dce": "<0.11.5|>=2.2,<2.6.2", + "t3g/analytics": "<1.1.1", "t3g/svg-sanitizer": "<1.0.3", "t3s/content-consent": "<1.0.3|>=2,<2.0.2", "tastyigniter/tastyigniter": "<4", @@ -8926,7 +9063,7 @@ "thelia/thelia": ">=2.0.0.0-beta1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<4.1.4", + "thorsten/phpmyfaq": "<4.2.0.0-alpha", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.9.3|>=8,<8.5.1", @@ -8950,21 +9087,21 @@ "twig/twig": "<3.27", "typicms/core": "<12.0.5|>=13,<13.0.9|>=14,<14.0.27|>=15,<15.0.29|>=16,<16.1.7", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.3", + "typo3/cms-backend": "<10.4.60|>=11,<11.5.54|>=12,<12.4.49|>=13,<13.4.35|>=14,<14.3.7", "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-beuser": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", - "typo3/cms-core": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.3", + "typo3/cms-core": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.34|>=14,<14.3.6", "typo3/cms-dashboard": ">=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", "typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-felogin": ">=4.2,<4.2.3", "typo3/cms-filelist": ">=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.3", "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1|>=8,<8.7.23|>=9,<9.5.4", - "typo3/cms-form": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.5", + "typo3/cms-form": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.9", "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", "typo3/cms-indexed-search": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<13.4.31|>=14,<14.3.3", "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2", - "typo3/cms-lowlevel": ">=11,<=11.5.41", + "typo3/cms-lowlevel": ">=11,<=11.5.41|>=14.2,<14.3.7", "typo3/cms-recordlist": ">=11,<11.5.48", "typo3/cms-recycler": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.3", "typo3/cms-redirects": ">=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", @@ -8981,6 +9118,7 @@ "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", "uasoft-indonesia/badaso": "<=2.9.7", + "ueberdosis/tiptap-php": "<2.1.1", "unisharp/laravel-filemanager": "<2.9.1", "universal-omega/dynamic-page-list3": "<3.6.4", "unopim/unopim": "<=0.3", @@ -8990,7 +9128,7 @@ "uvdesk/core-framework": "<=1.1.1", "vanilla/safecurl": "<0.9.2", "verbb/comments": "<1.5.5", - "verbb/formie": "<3.1.28", + "verbb/formie": "<3.1.31", "verbb/image-resizer": "<2.0.9", "verbb/knock-knock": "<1.2.8", "verot/class.upload.php": "<=2.1.6", @@ -9010,7 +9148,7 @@ "web-feet/coastercms": "==5.5", "web-token/jwt-bundle": "<3.4.10|>=4,<4.0.7|>=4.1,<4.1.7", "web-token/jwt-experimental": "<4.1.7", - "web-token/jwt-framework": "<4.1.7", + "web-token/jwt-framework": "<3.4.10|>=4,<4.0.7|>=4.1,<4.1.7", "web-token/jwt-library": "<3.4.10|>=4,<4.0.7|>=4.1,<4.1.7", "web-tp3/wec_map": "<3.0.3", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", @@ -9023,16 +9161,17 @@ "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", - "winter/wn-backend-module": "<1.2.12", - "winter/wn-cms-module": "<=1.2.9", + "winter/wn-backend-module": "<1.2.14", + "winter/wn-cms-module": "<=1.2.12", "winter/wn-dusk-plugin": "<2.1", - "winter/wn-system-module": "<1.2.4", + "winter/wn-system-module": "<1.2.13", "wintercms/winter": "<=1.2.3", "wireui/wireui": "<1.19.3|>=2,<2.1.3", "wnx/laravel-backup-restore": "<=1.9.3", "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", "wp-cli/wp-cli": ">=0.12,<2.5", - "wp-graphql/wp-graphql": "<=1.14.5", + "wp-coding-standards/wpcs": ">=0.14.1,<3.4.1", + "wp-graphql/wp-graphql": "<2.22.2", "wp-premium/gravityforms": "<2.4.21", "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", @@ -9059,10 +9198,11 @@ "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", "yoast/duplicate-post": "<=4.5", - "yourls/yourls": "<=1.10.2", + "yourls/yourls": "<=1.10.4", "yuan1994/tpadmin": "<=1.3.12", "yungifez/skuul": "<=2.6.5", "z-push/z-push-dev": "<2.7.6", + "zbateson/mail-mime-parser": "<3.0.6|>=4,<4.0.2", "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", @@ -9138,27 +9278,27 @@ "type": "tidelift" } ], - "time": "2026-07-17T19:07:03+00:00" + "time": "2026-10-23T21:03:08+00:00" }, { "name": "sebastian/cli-parser", - "version": "5.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca" + "reference": "eeb759ad3146b7096fb59c3195d39e071cd409e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/48a4654fa5e48c1c81214e9930048a572d4b23ca", - "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/eeb759ad3146b7096fb59c3195d39e071cd409e3", + "reference": "eeb759ad3146b7096fb59c3195d39e071cd409e3", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.2.6" }, "type": "library", "extra": { @@ -9187,7 +9327,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/5.0.1" }, "funding": [ { @@ -9207,20 +9347,20 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:39:44+00:00" + "time": "2026-08-01T04:27:14+00:00" }, { "name": "sebastian/comparator", - "version": "8.3.0", + "version": "8.4.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "c025fc7604afab3f195fab7cdaf72327331af241" + "reference": "3b070e608146cba00fd6fd1f0ffba89e5a8897fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c025fc7604afab3f195fab7cdaf72327331af241", - "reference": "c025fc7604afab3f195fab7cdaf72327331af241", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/3b070e608146cba00fd6fd1f0ffba89e5a8897fb", + "reference": "3b070e608146cba00fd6fd1f0ffba89e5a8897fb", "shasum": "" }, "require": { @@ -9228,10 +9368,10 @@ "ext-mbstring": "*", "php": ">=8.4", "sebastian/diff": "^9.0", - "sebastian/exporter": "^8.1.0" + "sebastian/exporter": "^8.2" }, "require-dev": { - "phpunit/phpunit": "^13.2" + "phpunit/phpunit": "^13.3" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -9239,7 +9379,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "8.3-dev" + "dev-main": "8.4-dev" } }, "autoload": { @@ -9279,7 +9419,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/8.3.0" + "source": "https://github.com/sebastianbergmann/comparator/tree/8.4.0" }, "funding": [ { @@ -9299,7 +9439,7 @@ "type": "tidelift" } ], - "time": "2026-06-05T03:06:45+00:00" + "time": "2026-08-07T07:23:13+00:00" }, { "name": "sebastian/complexity", @@ -9373,24 +9513,24 @@ }, { "name": "sebastian/diff", - "version": "9.0.0", + "version": "9.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226" + "reference": "a2df6626c1baf31d5a88674882a3072f151b5a26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a3fb6a298a265ff487a91bbea46e03cd01dbb226", - "reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a2df6626c1baf31d5a88674882a3072f151b5a26", + "reference": "a2df6626c1baf31d5a88674882a3072f151b5a26", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.2", - "symfony/process": "^7.4.13" + "phpunit/phpunit": "^13.3.1", + "symfony/process": "^7.4.17" }, "type": "library", "extra": { @@ -9428,7 +9568,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/9.0.0" + "source": "https://github.com/sebastianbergmann/diff/tree/9.0.1" }, "funding": [ { @@ -9448,27 +9588,27 @@ "type": "tidelift" } ], - "time": "2026-06-05T03:04:51+00:00" + "time": "2026-08-25T15:38:55+00:00" }, { "name": "sebastian/environment", - "version": "9.3.2", + "version": "9.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e" + "reference": "d4dd10267a11055066a2a78ae04583d8ddd4f595" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e", - "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d4dd10267a11055066a2a78ae04583d8ddd4f595", + "reference": "d4dd10267a11055066a2a78ae04583d8ddd4f595", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.1.11" + "phpunit/phpunit": "^13.3.6" }, "suggest": { "ext-posix": "*" @@ -9504,7 +9644,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/9.3.2" + "source": "https://github.com/sebastianbergmann/environment/tree/9.3.3" }, "funding": [ { @@ -9524,34 +9664,34 @@ "type": "tidelift" } ], - "time": "2026-05-25T13:41:38+00:00" + "time": "2026-10-01T12:37:56+00:00" }, { "name": "sebastian/exporter", - "version": "8.1.1", + "version": "8.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "cfaa77c750dcad6f44c9bac8f62ac486e1c82c26" + "reference": "24a3b69bba4a12ab615fca9d34680c5598d9ab7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/cfaa77c750dcad6f44c9bac8f62ac486e1c82c26", - "reference": "cfaa77c750dcad6f44c9bac8f62ac486e1c82c26", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/24a3b69bba4a12ab615fca9d34680c5598d9ab7a", + "reference": "24a3b69bba4a12ab615fca9d34680c5598d9ab7a", "shasum": "" }, "require": { "ext-mbstring": "*", "php": ">=8.4", - "sebastian/recursion-context": "^8.0" + "sebastian/recursion-context": "^8.0.1" }, "require-dev": { - "phpunit/phpunit": "^13.2.4" + "phpunit/phpunit": "^13.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.1-dev" + "dev-main": "8.2-dev" } }, "autoload": { @@ -9594,7 +9734,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/8.1.1" + "source": "https://github.com/sebastianbergmann/exporter/tree/8.2.1" }, "funding": [ { @@ -9614,7 +9754,7 @@ "type": "tidelift" } ], - "time": "2026-07-13T11:35:11+00:00" + "time": "2026-08-07T07:22:06+00:00" }, { "name": "sebastian/file-filter", @@ -9687,28 +9827,28 @@ }, { "name": "sebastian/git-state", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/git-state.git", - "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b" + "reference": "31a565f463686f0eefa85f899549256bf5805985" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/git-state/zipball/792a952e0eba55b6960a48aeceb9f371aad1f76b", - "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b", + "url": "https://api.github.com/repos/sebastianbergmann/git-state/zipball/31a565f463686f0eefa85f899549256bf5805985", + "reference": "31a565f463686f0eefa85f899549256bf5805985", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.4.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.0-dev" + "dev-main": "1.1-dev" } }, "autoload": { @@ -9732,7 +9872,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/git-state/issues", "security": "https://github.com/sebastianbergmann/git-state/security/policy", - "source": "https://github.com/sebastianbergmann/git-state/tree/1.0.0" + "source": "https://github.com/sebastianbergmann/git-state/tree/1.1.0" }, "funding": [ { @@ -9752,7 +9892,7 @@ "type": "tidelift" } ], - "time": "2026-03-21T12:54:28+00:00" + "time": "2026-10-21T05:59:52+00:00" }, { "name": "sebastian/global-state", @@ -9900,30 +10040,29 @@ }, { "name": "sebastian/object-enumerator", - "version": "8.0.0", + "version": "8.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5" + "reference": "511064ecde82bd747e2ba2fab3dda8d977b59576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/b39ab125fd9a7434b0ecbc4202eebce11a98cfc5", - "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/511064ecde82bd747e2ba2fab3dda8d977b59576", + "reference": "511064ecde82bd747e2ba2fab3dda8d977b59576", "shasum": "" }, "require": { "php": ">=8.4", - "sebastian/object-reflector": "^6.0", - "sebastian/recursion-context": "^8.0" + "sebastian/recursion-context": "^8.0.1" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -9946,7 +10085,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/8.0.0" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/8.1.0" }, "funding": [ { @@ -9966,27 +10105,27 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:46:36+00:00" + "time": "2026-08-13T07:05:05+00:00" }, { "name": "sebastian/object-reflector", - "version": "6.0.0", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200" + "reference": "f71bbcdc4f95456b4622810bec64eb06372e25b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/3ca042c2c60b0eab094f8a1b6a7093f4d4c72200", - "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f71bbcdc4f95456b4622810bec64eb06372e25b2", + "reference": "f71bbcdc4f95456b4622810bec64eb06372e25b2", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.3.0" }, "type": "library", "extra": { @@ -10014,7 +10153,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/6.1.0" }, "funding": [ { @@ -10034,27 +10173,27 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:47:13+00:00" + "time": "2026-08-13T06:34:36+00:00" }, { "name": "sebastian/recursion-context", - "version": "8.0.0", + "version": "8.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e" + "reference": "32dba72f2b4642d6a93db22d6c0a9280ff2e3ca0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/74c5af21f6a5833e91767ca068c4d3dfec15317e", - "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/32dba72f2b4642d6a93db22d6c0a9280ff2e3ca0", + "reference": "32dba72f2b4642d6a93db22d6c0a9280ff2e3ca0", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.2.6" }, "type": "library", "extra": { @@ -10090,7 +10229,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.0" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.1" }, "funding": [ { @@ -10110,27 +10249,27 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:51:28+00:00" + "time": "2026-08-03T05:58:12+00:00" }, { "name": "sebastian/type", - "version": "7.0.1", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fee0309275847fefd7636167085e379c1dbf6990" + "reference": "bd1df467864cb95140414059a535b2d906173fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fee0309275847fefd7636167085e379c1dbf6990", - "reference": "fee0309275847fefd7636167085e379c1dbf6990", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/bd1df467864cb95140414059a535b2d906173fcf", + "reference": "bd1df467864cb95140414059a535b2d906173fcf", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.1.10" + "phpunit/phpunit": "^13.3.0" }, "type": "library", "extra": { @@ -10159,7 +10298,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/7.0.1" + "source": "https://github.com/sebastianbergmann/type/tree/7.0.2" }, "funding": [ { @@ -10179,20 +10318,20 @@ "type": "tidelift" } ], - "time": "2026-05-20T06:49:11+00:00" + "time": "2026-08-10T08:00:57+00:00" }, { "name": "sebastian/version", - "version": "7.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b" + "reference": "f1598cf1d8d1ca4c0f194a52f2fe72a559a7b0b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ad37a5552c8e2b88572249fdc19b6da7792e021b", - "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/f1598cf1d8d1ca4c0f194a52f2fe72a559a7b0b1", + "reference": "f1598cf1d8d1ca4c0f194a52f2fe72a559a7b0b1", "shasum": "" }, "require": { @@ -10225,7 +10364,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/version/tree/7.0.1" }, "funding": [ { @@ -10245,7 +10384,7 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:52:52+00:00" + "time": "2026-10-04T05:51:14+00:00" }, { "name": "staabm/side-effects-detector", @@ -10301,16 +10440,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v8.1.1", + "version": "v8.1.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "abd6c11dc468725d1627302ad10f6cd486e9e3d0" + "reference": "7458da64220376b2e0dc2d8451bf43382c1ad297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abd6c11dc468725d1627302ad10f6cd486e9e3d0", - "reference": "abd6c11dc468725d1627302ad10f6cd486e9e3d0", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7458da64220376b2e0dc2d8451bf43382c1ad297", + "reference": "7458da64220376b2e0dc2d8451bf43382c1ad297", "shasum": "" }, "require": { @@ -10363,7 +10502,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/v8.1.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.5" }, "funding": [ { @@ -10383,7 +10522,7 @@ "type": "tidelift" } ], - "time": "2026-06-09T12:28:30+00:00" + "time": "2026-08-21T17:47:34+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -10467,16 +10606,16 @@ }, { "name": "symfony/filesystem", - "version": "v8.1.0", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "99aec13b82b4967ec5088222c4a3ecca955949c2" + "reference": "43d109c803d22c00bb820ed45df250b6a8792ca2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/99aec13b82b4967ec5088222c4a3ecca955949c2", - "reference": "99aec13b82b4967ec5088222c4a3ecca955949c2", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/43d109c803d22c00bb820ed45df250b6a8792ca2", + "reference": "43d109c803d22c00bb820ed45df250b6a8792ca2", "shasum": "" }, "require": { @@ -10514,7 +10653,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v8.1.0" + "source": "https://github.com/symfony/filesystem/tree/v8.1.9" }, "funding": [ { @@ -10534,20 +10673,20 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-10-06T20:05:50+00:00" }, { "name": "symfony/finder", - "version": "v8.1.1", + "version": "v8.1.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e2989e762c70f9490fa3a00a0ac0fae5aa97a531" + "reference": "bd4fed193a3132c91c5c93595cbfc78988915822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e2989e762c70f9490fa3a00a0ac0fae5aa97a531", - "reference": "e2989e762c70f9490fa3a00a0ac0fae5aa97a531", + "url": "https://api.github.com/repos/symfony/finder/zipball/bd4fed193a3132c91c5c93595cbfc78988915822", + "reference": "bd4fed193a3132c91c5c93595cbfc78988915822", "shasum": "" }, "require": { @@ -10582,7 +10721,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v8.1.1" + "source": "https://github.com/symfony/finder/tree/v8.1.8" }, "funding": [ { @@ -10602,7 +10741,7 @@ "type": "tidelift" } ], - "time": "2026-06-27T09:05:56+00:00" + "time": "2026-09-26T06:33:49+00:00" }, { "name": "symfony/polyfill-php81", @@ -10686,16 +10825,16 @@ }, { "name": "symfony/process", - "version": "v8.1.0", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5" + "reference": "59a682fd049b2d4d37c444f5ac21b7d01b8c7189" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", - "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", + "url": "https://api.github.com/repos/symfony/process/zipball/59a682fd049b2d4d37c444f5ac21b7d01b8c7189", + "reference": "59a682fd049b2d4d37c444f5ac21b7d01b8c7189", "shasum": "" }, "require": { @@ -10727,7 +10866,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.1.0" + "source": "https://github.com/symfony/process/tree/v8.1.9" }, "funding": [ { @@ -10747,7 +10886,7 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-10-08T16:57:43+00:00" }, { "name": "symfony/stopwatch", @@ -10817,16 +10956,16 @@ }, { "name": "symfony/var-dumper", - "version": "v8.1.1", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "40096a2515a979f3125c5c928603995b8664c62a" + "reference": "b8c168c764c09f5d931f290c9dbdd13f1bf142f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/40096a2515a979f3125c5c928603995b8664c62a", - "reference": "40096a2515a979f3125c5c928603995b8664c62a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8c168c764c09f5d931f290c9dbdd13f1bf142f3", + "reference": "b8c168c764c09f5d931f290c9dbdd13f1bf142f3", "shasum": "" }, "require": { @@ -10842,7 +10981,7 @@ "symfony/http-kernel": "^7.4|^8.0", "symfony/process": "^7.4|^8.0", "symfony/uid": "^7.4|^8.0", - "twig/twig": "^3.12" + "twig/twig": "^3.12|^4.0" }, "bin": [ "Resources/bin/var-dump-server" @@ -10880,7 +11019,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v8.1.1" + "source": "https://github.com/symfony/var-dumper/tree/v8.1.9" }, "funding": [ { @@ -10900,7 +11039,7 @@ "type": "tidelift" } ], - "time": "2026-06-09T10:54:51+00:00" + "time": "2026-10-13T05:48:51+00:00" }, { "name": "theseer/tokenizer", diff --git a/src/Infrastructure/Contract/Service/UnsubscribeInterface.php b/src/Infrastructure/Contract/Service/UnsubscribeInterface.php index cf6eb98..d21957e 100644 --- a/src/Infrastructure/Contract/Service/UnsubscribeInterface.php +++ b/src/Infrastructure/Contract/Service/UnsubscribeInterface.php @@ -26,4 +26,4 @@ interface UnsubscribeInterface * @return array{statusCode: int, success: bool, message: string} */ public function unsubscribe(array $data): array; -} \ No newline at end of file +} diff --git a/src/Infrastructure/Presentation/Api/Controller/Unsubscribe.php b/src/Infrastructure/Presentation/Api/Controller/Unsubscribe.php index 32cafbb..5ad1a4a 100644 --- a/src/Infrastructure/Presentation/Api/Controller/Unsubscribe.php +++ b/src/Infrastructure/Presentation/Api/Controller/Unsubscribe.php @@ -73,4 +73,4 @@ public function __invoke(ServerRequestInterface $request, array $args = []): Res $result['errors'] ?? [] ); } -} \ No newline at end of file +} diff --git a/src/Infrastructure/Presentation/Api/Model/Unsubscribe.php b/src/Infrastructure/Presentation/Api/Model/Unsubscribe.php index c9af1ba..f1845f6 100644 --- a/src/Infrastructure/Presentation/Api/Model/Unsubscribe.php +++ b/src/Infrastructure/Presentation/Api/Model/Unsubscribe.php @@ -68,4 +68,4 @@ public function toArray(): array 'email' => $this->email, ]; } -} \ No newline at end of file +} diff --git a/src/Infrastructure/Presentation/Http/Controller/Page/Unsubscribe.php b/src/Infrastructure/Presentation/Http/Controller/Page/Unsubscribe.php index 47205a3..d285605 100644 --- a/src/Infrastructure/Presentation/Http/Controller/Page/Unsubscribe.php +++ b/src/Infrastructure/Presentation/Http/Controller/Page/Unsubscribe.php @@ -32,4 +32,4 @@ public function __invoke(ServerRequestInterface $request, array $args = []): Res return $this->render('unsubscribe'); } -} \ No newline at end of file +} From 92545f09fa8914d1f6c7fbf5bb76ddaf50e6d105 Mon Sep 17 00:00:00 2001 From: Mohammed Shifreen Date: Sat, 24 Oct 2026 23:34:45 +0530 Subject: [PATCH 3/3] Fixed PHPUnit configuration file. --- phpunit.dist.xml | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/phpunit.dist.xml b/phpunit.dist.xml index fd6ace9..950cb1c 100644 --- a/phpunit.dist.xml +++ b/phpunit.dist.xml @@ -1,28 +1,13 @@ - - - - test/Unit - - - - - src - - + + + + test/Unit + + + + + src + +